/var/log/messages

Apr 22, 2015 - 2 minute read - Comments - android

LoopingViewPager と PagerTabStrip と

なんというかタイトルを表示させたいとのことで、某 LoopViewPager で頑張ろうとしていたのですが、色々なしがらみがあるようでしたので、とりあえず android.support.v4.view と相性が良いらしい Loop な ViewPager を使ってみることに。

盛り込み自体は楽勝でした。あとは以下な順にて PagerTItleStrip および PagerTabStrip なソースを手元にて云々することに。

  • ソースツリーに android.support.v4.view パケジ作成
  • PagerTitleStrip を MyPagerTitleStrip としてコピィ
  • PagerTabStrip を MyPagerTabStrip としてコピィ
  • 色々修正
  • レイアウトに盛り込む

修正対象ですが PagerTitleStrip を継承したクラスです。タイトルなどを表示しているのが updateText というメソドな模様 (というか、ここからアダプタの getTitle を呼び出していました)。

以下な実装になっています。

    CharSequence text = null; 
    if (currentItem >= 1 && adapter != null) { 
        text = adapter.getPageTitle(currentItem - 1); 
    } 
    mPrevText.setText(text); 
 
    mCurrText.setText(adapter != null && currentItem < itemCount ? 
            adapter.getPageTitle(currentItem) : null); 

    text = null; 
    if (currentItem + 1 < itemCount && adapter != null) { 
        text = adapter.getPageTitle(currentItem + 1); 
    } 
    mNextText.setText(text); 

ちなみにアダプタの getTitle というメソドが以下な定義になってます。

    @Override
    public CharSequence getPageTitle(int position) {
        return "item " + (position - 1);
    }

position - 1 て xD

どうも PagerTitleStrip の中では currentItem は 1 オリジンな模様。無理やりでっちあげた実装が以下です。これでタイトル部分が表示されるようになったはなったのですが微妙。

    CharSequence text = null;
    if (currentItem >= 2 && adapter != null) {
        text = adapter.getPageTitle(currentItem - 1);
    } else if (adapter != null) {
        text = adapter.getPageTitle(itemCount);
    }
    mPrevText.setText(text);

    mCurrText.setText(adapter != null && currentItem <= itemCount ?
            adapter.getPageTitle(currentItem) : null);

    text = null;
    if (currentItem + 1 <= itemCount && adapter != null) {
        text = adapter.getPageTitle(currentItem + 1);
    } else if (adapter != null) {
        text = adapter.getPageTitle(1);
    }
    mNextText.setText(text);

1 とか渡しているあたり何だよと xD