大佬教程收集整理的这篇文章主要介绍了android – 具有相同类的多个片段实例的ViewPager,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是,当活动启动时,只有1个片段似乎正在工作(viewPager中位置0的片段).我试图在我的PagerAdapter中的第0位返回新的Fragment(),但是当我这样做时,它是第二个正在工作的片段. (通过工作我的意思是在左边显示列表,我仍然没有处理右边的细节片段)
这是一些代码
CustomPagerAdapter.java
public class CustomPagerAdapter extends FragmentPagerAdapter{ public CustomPagerAdapter(FragmentManager fm) { super(fm); } public CustomPagerAdapter(FragmentManager fm,Context context) { super(fm); } @Override public Fragment getItem(int pos) { if(pos == 4) return new OtherContainerFragment(); else return new ContainerFragment(pos); } @Override publi@R_673_8592@ getCount() { return 5; }
ContainerFragment.java
public class ContainerFragment extends Fragment { privatE int CONTAINER_TYPE; public ContainerFragment(){ } public ContainerFragment(int typE){ CONTAINER_TYPE = type; } @Override public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) { return inflater.inflate(R.layout.fragment_container,container,falsE); } @Override public void onViewCreated(View view,Bundle savedInstanceStatE) { super.onViewCreated(view,savedInstanceStatE); Fragmenttransaction ft = getActivity().getSupportFragmentManager().begintransaction(); CustomListFragment frag = new CustomListFragment(CONTAINER_TYPE); ft.replace(R.id.replaceable_list,frag); ft.commit();
CustomListFragment.java
public class CustomListFragment extends SuperCustomListFragment{ private ArrayList<Model> mModels; privatE int TYPE; public CustomListFragment(){ } public CustomListFragment(int typE){ TYPE = type; } @Override public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); } @Override public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE) { return super.onCreateView(inflater,savedInstanceStatE); } @Override public void onViewCreated(View view,savedInstanceStatE); mModels = new ArrayList<Model>(); if(TYPE == AppConstants.FRAGMENT_TYPE_JOURNAL){ mAdapter = AppUtils.getJournallistadapter(getActivity(),mModels); new syncPapers().execute(); }else if(TYPE == AppConstants.FRAGMENT_TYPE_MOVIES){ mAdapter = AppUtils.getMovieslistadapter(getActivity(),mModels); new syncMovies().execute(); } if(mAdapter != null) mListView.setAdapter(mAdapter); //mListView is defined in the superClass
以下是我使用的常量:
public class AppConstants { public static final int FRAGMENT_TYPE_AgendA = 0; //so Fragment at position 0 should be of type agenda public static final int FRAGMENT_TYPE_NEWS = 1; // position 1 should be of type news public static final int FRAGMENT_TYPE_MOVIES = 2; // ... public static final int FRAGMENT_TYPE_JOURNAL = 3; // ... }
和容器的xml:
<LinearLayout xmlns:android="http://scheR_462_11845@as.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <LinearLayout android:id="@+id/replaceable_list" android:layout_width="match_parent" android:layout_height="match_parent" > </LinearLayout> <LinearLayout android:id="@+id/replaceable_details" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:BACkground="@drawable/BACkground" > </LinearLayout> </LinearLayout>
因此,这段代码不起作用,似乎片段容器左侧的列表在每个片段中被替换,只有位置0的片段显示它. (目前它显示带有“JOURNAL”类型的适配器的列表,但它应显示“AgendA”类型的列表.
——————–
*但是…… *
——————–
如果我创建不同的fragment_container布局文件,并在ContainerFragment.java中的onCreateView和onViewCreated中编写IF条件,一切正常.
所以:
ContainerFragment.java
@Override public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE) { if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_JOURNAL) return inflater.inflate(R.layout.fragment_container_journal,falsE); else if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_MOVIES) return inflater.inflater(R.layout.fragment_container_movies,falsE); else return super.onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE); } @Override public void onViewCreated(View view,savedInstanceStatE); Fragmenttransaction ft = getActivity().getSupportFragmentManager().begintransaction(); CustomListFragment frag = new CustomListFragment(CONTAINER_TYPE); if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_JOURNAL) ft.replace(R.id.replaceable_journal_list,frag); else if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_MOVIES) ft.replace(R.id.replaceable_movies_list,frag); else return; ft.commit();
我想这是因为在每个片段中,我替换了相同ID的LinearLayout? (replaceable_list)
我认为可以为每个片段共享相同的布局文件,并且不想创建4个相同的布局文件.但看起来我必须这样做?
或者我在这里遗漏了什么?
感谢您的时间,
以上是大佬教程为你收集整理的android – 具有相同类的多个片段实例的ViewPager全部内容,希望文章能够帮你解决android – 具有相同类的多个片段实例的ViewPager所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。