我有一个片段界面,底部有标签,可以在主视图中打开不同的片段.
我有一个特定的片段,它是一个项目列表.如果用户选择此列表中的一个项目,则打开另一个片段,其中包含一个viewpager,它在前一个片段的列表中的所有项目之间水平滚动.这非常有效.
viewpager使用FragmentPagerAdapter来显示项目.
当用户选择列表中的项目,查看它,然后点击标签栏上的按钮返回列表,然后选择另一个项目时,问题就出现了.第二次选择项目时,将显示空白屏幕而不是viewpager.发生这种情况时,我的LogCat中没有收到任何错误.
为什么viewpager只出现在第一次?
FragmentPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter {
Cursor mCursor;
public ViewPagerAdapter(FragmentManager fm, Cursor c) {
super(fm);
mCursor = c;
}
public void changeCursor(Cursor c) {
mCursor = c;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
if (mCursor == null) return 0;
else return mCursor.getCount();
}
@Override
public Fragment getItem(int position) {
mCursor.moveToPosition(position);
return TeamCardFragment.newInstance(mCursor, position);
}
}
Run Code Online (Sandbox Code Playgroud)
PagerFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = getArguments();
mCursorPosition = bundle.getInt(TeamCardCommon.BUNDLE_KEY_CURSOR_POSITION); …
Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager android-nested-fragment
我需要在一个片段中放置一个ViewPager,但我有两个片段,片段1是我的菜单,片段2我想用作ViewPagerIndicator.
但是片段不能有另一个片段......我需要做些什么呢?
android android-fragments android-viewpager android-nested-fragment
我已经实现了FragmentPagerAdapter
和使用a List<Fragment>
来保存所有片段以供我ViewPager
显示.在addItem()
我只是添加一个实例化Fragment
然后调用notifyDataSetChanged()
.我不确定这是否有必要.
我的问题只是......从片段1开始
[Fragment 1]
Run Code Online (Sandbox Code Playgroud)
添加新的片段2
[Fragment 1] [Fragment 2]
Run Code Online (Sandbox Code Playgroud)
删除片段2
[Fragment 1]
Run Code Online (Sandbox Code Playgroud)
添加新的片段3
[Fragment 1] [Fragment 2]
Run Code Online (Sandbox Code Playgroud)
添加新片段时,一切看起来都很棒.删除片段然后添加新实例化的片段后,仍会显示旧片段.当我去.getClass.getName()
它时,它给了我片段3的名字,但我仍然看到片段2.
我相信这可能是一个问题,instantiateItem()
但我认为适配器是为我们处理.任何建议都会很棒.
适配器代码......
public class MyPagerAdapter extends FragmentPagerAdapter {
public final ArrayList<Fragment> screens2 = new ArrayList<Fragment>();
private Context context;
public MyPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
public void removeType(String name){
for(Fragment f: screens2){
if(f.getClass().getName().contains(name)){ screens2.remove(f); return; }
}
this.notifyDataSetChanged();
}
public boolean addSt(String …
Run Code Online (Sandbox Code Playgroud) 我正在研究Android应用程序,我想使用3个选项卡为每个选项卡使用Fragments进行导航,但我不知道如何创建这样做的结构.
我想分别添加每个片段,因为每个片段都不同,但我不知道在FragmentActivity中将它们添加到何处.
我有这些文件.
tabs_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TabHost android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<FrameLayout
android:id="@+id/tabRateAPet"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<FrameLayout
android:id="@+id/tabViewMyRates"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<FrameLayout
android:id="@+id/tabViewGlobalRates"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
TabsMain.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
public class MainTabsActivity extends FragmentActivity {
public static final String RATE_A_PET = "Rate a Pet";
public static final String MY_RATES = "My Rates";
public static final …
Run Code Online (Sandbox Code Playgroud) android android-tabhost android-fragments android-fragmentactivity
我遇到了困扰我好几天的问题.
ViewPager
主要活动中有一个持有3 Fragment
秒作为标签片段.在第一个片段中有一个ListView
包含一些视图,哪个是最重要的视图,另一个视图ViewPager
.我想在子中保存一些照片ViewPager
,并在这里使用更多片段.
现在有麻烦:
当第一个 Fragment
停止时(父节点中的第三个片段在ViewPager
屏幕上显示)并恢复(用户切换到第二个片段),应用程序崩溃,调试器说:
java.lang.IllegalArgumentException: No view found for id 0x7f05008b (com.example.viewpager:id/sub_viewpager) for fragment ScreenSlidePageFragment
Run Code Online (Sandbox Code Playgroud)
我已经使用了,getChildFragmentManager()
因为这是嵌套片段的情况.
以下是与父ViewPager中第一个片段对应的列表适配器的关键代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
switch (type) {
case TYPE_BANNER:
if (convertView == null) {
convertView = mBannerView.getBannerView(parent);
}
mBannerView.update(convertView);
break;
case TYPE_ITEM:
break;
}
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
这是代码mBannerView …
我在viewpager中有三个片段.
其中两个片段有自己的onCreateOptionsMenu方法版本:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Set up 1 action button
inflater.inflate(R.menu.home_snapshot_add, menu);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Set up 2 action buttons
inflater.inflate(R.menu.home_snapshot_send, menu);
}
Run Code Online (Sandbox Code Playgroud)
home活动有一个基本的onCreateOptionsMenu方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
在onCreate方法中,每个片段都调用该方法:
setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)
每个菜单项都有标签:
android:showAsAction="always"
Run Code Online (Sandbox Code Playgroud)
好像我打开Activity一样,所有三个按钮都出现了.然而,当我滚动它们时,错误的那些神奇地消失了.感觉就像活动在Activity创建时调用每个Fragment的选项菜单,然后在我向左和向右滑动时适当地更改菜单.我检查了菜单,但不确定是什么问题.您认为我需要检查的任何事情?我有点想法了.
谢谢!
android android-fragments android-optionsmenu android-actionbar
我试图在一个片段中的viewpager(fragmentpager)中使用google maps v2.如果我滑到第四个片段(查看寻呼机),它工作正常,但如果我回到第一个片段,然后回到第四个 - 与地图 - 我的应用程序死了.
07-04 19:38:20.937: E/AndroidRuntime(20175): FATAL EXCEPTION: main
07-04 19:38:20.937: E/AndroidRuntime(20175): android.view.InflateException: Binary XML
file line #13: Error inflating class fragment
...
07-04 19:38:20.937: E/AndroidRuntime(20175): Caused by:
java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f050010,
tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
07-04 19:38:20.937: E/AndroidRuntime(20175): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
07-04 19:38:20.937: E/AndroidRuntime(20175): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
Run Code Online (Sandbox Code Playgroud)
Android Java:
public class LocationDetail extends Fragment {
private SupportMapFragment mMapFragment;
private GoogleMap map;
private EventAdapter listAdapter ; …
Run Code Online (Sandbox Code Playgroud) FragmentPagerAdapter
ViewPager与OffScreenLimit设置为1和FragmentStatePagerAdapter
?之间有什么区别?
关于FragmentPagerAdapter
Google的指南说:
此版本的寻呼机最适合在有少量通常更多静态片段进行分页时使用,例如一组选项卡.用户访问的每个页面的片段将保留在内存中,但其视图层次结构可能在不可见时被销毁.这可能导致使用大量内存,因为片段实例可以保持任意数量的状态.对于较大的页面集,请考虑FragmentStatePagerAdapter.
关于FragmentStatePagerAdapter
:
当存在大量页面时,此版本的寻呼机更有用,更像列表视图.当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态.与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少的存储器,代价是在页面之间切换时可能具有更多的开销.
我想如果我将offscreenlimit设置为1,它会破坏当前片段的下两个片段之外的所有片段,并且它的行为类似于FragmentStatePagerAdapter.它是否正确?
android android-fragments android-viewpager android-pageradapter
[编辑]:谢谢你们所有有意义的答案,问题现在已经解决了,谢谢你的帮助.类似的问题:Android:我无法拥有ViewPager WRAP_CONTENT
我正在尝试实现我的应用程序的UI:我希望每行ListView
都有一个ViewPager
.
这是我的文件:
MainActivity.java
package com.condi;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListAdapter(new CardListAdapter(this, getFragmentManager()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
CardListAdapter.java
package com.condi;
import java.util.List;
import android.app.FragmentManager;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public class CardListAdapter extends BaseAdapter {
private Context context;
private FragmentManager fragmentManager;
private List<Profile> …
Run Code Online (Sandbox Code Playgroud) 我有一个jake Wharton的viewpagerindicator,在那个viewpager我有6个页面.所有页面都包含listviews,我用AsyncTask加载它们.有时viewpager在错误的索引显示错误的页面.这是我的viewpager适配器:
public class TestFragmentAdapter extends FragmentPagerAdapter{
protected static final String[] CONTENT = new String[] { "a","b","c","d","e","f" };
private int mCount = CONTENT.length;
Fragment fragment1,fragment2,fragment3,fragment4,fragment5,fragment6;
public TestFragmentAdapter(FragmentManager fm) {
super(fm);
fragment1 = new CategoryListView();
fragment2 = CustomizedListviewRecent.newInstance(41);
fragment3 = CustomizedListviewMostRecents.newInstance(0);
fragment4 = CustomizedListviewPopulars.newInstance();
fragment5 = CustomizedListviewRecent.newInstance(42);
fragment6 = CustomizedListviewRecent.newInstance(43);
}
@Override
public Fragment getItem(int position) {
if(position == 0)
return fragment1;
else if(position == 1)
return fragment2;
else if(position == 2)
return fragment3;
else if(position == 3)
return fragment4;
else …
Run Code Online (Sandbox Code Playgroud)