#○ 事前準備として
##FragmentStatePagerAdapterクラスを作成
役割:viewPagerに必要なFragmentページを渡す
CustomFragmentStatePagerAdapter.java
public CustomFragmentStatePagerAdapter extends FragmentStatePagerAdapter{//FragmentStatePageAdapterを継承(*1)
private SparseArray<Fragment> mFragmentArray;
private List<HogeData> mHogeDataList;
public CustomFragmentStatePagerAdapter(FragmentManager fm,List<HogeData> dataList){
super(fm);
mFragmentArray = new ArrayList<>(); //返却するFragmentのList初期化
mHogeDataList = dataList; //ここでデータを保持しておく //FragmentはgetItemで作成
}
@Override
public HogeFragment getItem(int position){ //Fragmentのページを返却する実装を書く
HogeFragment fragment = mFragmentArray.get(position);
if (fragment != null) {
return fragment; //すでにFragmentを作っていたらリサイクルして使用する
}
fragment = HogeFragment.createInstance(mHogeDataList.get(position));
mFragmentArray.append(position, fragment);
return fragment;
}
@Override
public getCount(){ //mViewPager.setAdapterするときにここを参照してページ数を決める
return mHogeDataList.size();
}
@Override
public getPageTitle(){ //tabLayoutと連携しているときmViewPager.setAdapterしたときにここの文言をタブに表示する
return title;
}
public void setHogeDataList(List<HogeData> dataList) {
mHogeDataList = dataList;
notifyDataSetChanged();//データを変更した時に呼ぶ//すべてのfragmentページが再生成される
}
}
(補足)
*1 Fragmentを使用する時のViewPagerのAdapterはFragmentStatePagerAdapter
とFragmentPagerAdapter
がある。Stateの方はFragmentの状態のみを保持する。メモリ節約したい時はStateを使うみたい
#○ 使用例
ViewPager mViewPager;
CustomFragmentStatePagerAdapter mAdapter;
TabLayout mTabs; //tabLayoutを連携させる時
mViewPager.setAdapter(mAdapter);
mViewPager.setOffscreenPageLimit(2); //左右の保持するFragment数を設定、デフォルトは1
mTabs.setupWithViewPager(mViewPager); //tabLayoutと連携する場合
//補足
mPager.setCurrentItem(3); //ページ変更
mTabs.addOnTabSelectedListener();//Tabが選択された時のリスナー
参考資料
https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html //公式HP
http://k-1-ne-jp.blogspot.jp/2013/12/viewpagerfragmentstatepageradapter.html //ViewPagerを使ってみる(FragmentStatePagerAdapterを利用する)