無趣味な人

生まれてこの方、無趣味。ハマったものこれといって特になし。

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を使った時は苦労した記憶があるので難しいのかと思ったが、拍子抜けするぐらい簡単だった。

f:id:itereta:20170404125455p:plain