0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ViewPagerの使い方(Android)~Fragmentページを作る~

Last updated at Posted at 2017-05-17

#○ 事前準備として
##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はFragmentStatePagerAdapterFragmentPagerAdapterがある。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を利用する)

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?