FragmentStatePagerAdapter
ViewPager 内にフラグメントを表示するためにa を使用しています。これらのフラグメントはすべて同じレイアウト コンテナー (a FrameLayout
) に従いますが、その数は実行時に変更可能であるため、それらすべてをList
フラグメントの静的に配置して渡します。そのリストをFragmentStatePagerAdapter
(最初はコンストラクターを介して、その後は毎回リストとを更新するだけですnotifydatasetchanged
):
public class MyPageAdapter extends FragmentStatePagerAdapter {
public static List<Fragment> myFragments = new ArrayList<Fragment>();
public MyPageAdapter(FragmentManager fragmentManager, List<Fragment> fragments) {
super(fragmentManager);
myFragments = fragments;
}
public Fragment getItem(int i) {
return myFragments.get(i);
}
@Override
public int getCount() {
return myFragments.size();
}
}
これはFragment List
、実行時に次の方法で作成する方法です。
public List<Fragment> fragmenting(int num) { // num: the Number of fragments i wanna create
List<Fragment> fragments = new Vector<Fragment>();
for(int i =0; i < num ; i++){
Bundle page = new Bundle();
page.putInt("index", i);
fragments.add(Fragment.instantiate(mContext, MyFragment.class.getName(), page));
}
return fragments;
}
新しいフラグメントをにコミットするには:ViewPager
public static PagerAdapter ad;
public static ViewPager sViewPager;
private static MyPageAdapter mpa;
public void display_fragments(int i, boolean init) {
if(init){ // init means we are in the first initialization and it goes here only at the first time
List<Fragment> fragments = fragmenting(i);
mpa = new MyPageAdapter(getChildFragmentManager(), fragments);
sViewPager = (ViewPager) view.findViewById(R.id.my_view_pager);
}else{ // is our case here
List<Fragment> fragments = fragmenting(i);
MyPageAdapter.myFragments = fragments;
mpa.notifyDataSetChanged();
}
ad = mpa;
sViewPager.setAdapter(ad);
sViewPager.setCurrentItem(0);
}
この段階ではすべて問題ありません。指定された数のフラグメントをナビゲートすると、各フラグメントにフラグメントのコンテナがあるため、効率的にナビゲートできますMyFragment
。
しかし、フラグメントのビューにアクセスしようとすると、最初の2 つのフラグメントのみFrameLayout
に従って、指定されたビュー ()が返され、その後、返されたビューをループして出力しようとしました:MyFragment
null
mpa
for(int g =0; g < mpa.getCount(); g++){
System.out.println(mpa.getItem(g));
}
これは私が得たものです:
05-12 08:36:10.175: I/System.out(1062): MyFragment{53535b8c #1 id=0x7f06005e}
05-12 08:36:10.175: I/System.out(1062): MyFragment{540e71b4 #0 id=0x7f06005e}
05-12 08:36:10.175: I/System.out(1062): MyFragment{540e7298}
05-12 08:36:10.175: I/System.out(1062): MyFragment{540e737c}
05-12 08:36:10.175: I/System.out(1062): MyFragment{540e7460}