ViewPager + actionbar Sherlock タブを使用する画面があります。ページャーにsetOnPageChangeListener
セットがあり、次のことを行います。
@Override
public void onPageSelected(final int position) {
actionBar.setSelectedNavigationItem(position);
}
タブがほとんどなく、すべてのタブが表示されている場合、これは縦向きモードでも横向きモードでも問題なく機能します。ただし、ランドスケープにさらにいくつかのタブを追加すると、これらは 1 つのドロップダウン ウィジェットに折りたたまれます。ViewPager をページングすると、setSelectedNavigationItem
メソッドが実行されますが、ドロップダウンの選択には影響しません。最後に選択した値のままです。ユーザーが視覚的な手がかりを失っているので、これは本当に悪いです: タブは「1つ」と言うかもしれませんが、ユーザーはすでにページ #6 にいます.
位置に基づいて表示するタブをプログラムで変更する方法はありますか?
PS私はこれが起こる理由を知っています:これはcom.android.internal.app.ActionBarImplのコードです:
public void setSelectedNavigationItem(int position) {
switch (mActionView.getNavigationMode()) {
case NAVIGATION_MODE_TABS:
selectTab(mTabs.get(position));
break;
case NAVIGATION_MODE_LIST:
mActionView.setDropdownSelectedPosition(position);
break;
default:
throw new IllegalStateException(
"setSelectedNavigationIndex not valid for current navigation mode");
}
}
そして、それをステップ実行すると、タブがリストとして表示されますが、ナビゲーションモードがまだ NAVIGATION_MODE_TABS であることがわかります。さて、私のひざまずいた反応は、onConfigurationChanged にコードを入れてナビゲーション モードを適切に設定することですが、これは自動的に行われるべきではありませんか?
PPSそして、パッチを含むAndroidバグがすでに提出されています