ViewPagerIndicatorからPagerSlidingTabStripに変更した
ViewPagerIndicatorを使ったアプリをPagerSlidingTabStripに変更した。 メモ的に必要だった変更をまとめた。簡単だった。
1. build.gradleのdependenciesに以下を追加する。
compile ‘com.astuetz:pagerslidingtabstrip:1.0.1’
2. PagerSlidingTabStrip widgetをレイアウトに追加する
<com.astuetz.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="48dip" />
これをViewPagerの上に追加した。 ViewPagerは今までViewPagerIndicatorの下に配置するようになっていたので、
android:layout_below="@+id/tabs"
と変更して、PagerSlidingTabStripの下に配置するように変更した。
ViewPagerIndicatorは android:visibility=“gone” として、一時的に非表示にした。PagerSlidingTabStripの動作確認後に完全に削除する。
3.onCreateでバインドする
サンプルなどでは以下のように書いてある。
// Initialize the ViewPager and set an adapter ViewPager pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(new TestAdapter(getSupportFragmentManager())); // Bind the tabs to the ViewPager PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); tabs.setViewPager(pager);
pager.setAdapter(new TestAdapter(getSupportFragmentManager())); の部分がよく分からない。
私はViewPagerIndicatorで使っていた、アダプターをそのまま使いたいので、以下のような感じになる。
mViewPagerAdapter = new ViewPagerAdapter(this); mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setAdapter(mViewPagerAdapter); // Bind the tabs to the ViewPager PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); tabs.setViewPager(mViewPager);
4. ViewPagerAdapterの変更
ViewPagerIndicatorを使っていたので、ViewPagerAdapterは以下のような感じ。このまま使うが、メソッドを追加したり変更する必要がある。
public class ViewPagerAdapter extends PagerAdapter implements TitleProvider
1.getPageTitleを追加する
タブタイトルを返すメソッドを追加する。 ViewPagerIndicatorではgetTitleを使っていたが、PagerSlidingTabStripではgetPageTitleとなる。
public CharSequence getPageTitle(int position)
という、タブのタイトルをCharSequenceで返すメソッドを追加する。 getTitleをコピーして変更すればいい。
2. もしinstantiateItemがdepregatedだったら
以下のようにViewをViewGroupに変更する
変更前
public Object instantiateItem(View pager, final int position) {
変更後
public Object instantiateItem(ViewGroup pager, final int position) {
以上、あとはViewPagerIndicatorの使用箇所を削除していけばいいだけだった。 最初にViewPagerIndicatorを使った時は苦労した記憶があるので難しいのかと思ったが、拍子抜けするぐらい簡単だった。