9

アクション バーに複数のタブがあるアプリがあり、各タブには、アクション バーに表示されるオプション メニュー アイコンのセットが異なります。2 つのアイコンがあるタブもあれば、何もないタブもあります。

問題は、画面間をスワイプすると、個々の画面のボタンが表示される場合と表示されない場合があることです。つまり、2 つのアイコンが表示されるはずの画面で、アクション バーにアイコンが表示されません!

ただし、タブをクリックすると、画面には必ず正しいアイコンが表示されます。

デバッガーで問題を分析してみました。FragmentPagerAdapterが新しく選択されたフラグメントを正しく呼び出しsetMenuVisibility(true)ており、他のフラグメントが で呼び出されていることは確かですsetMenuVisibility(false)

ボタンの出現/非表示の正確なパターンが見つかりません。それぞれに 2 つの異なるボタンがある 2 つの画面間で左右にスワイプできます。この問題は、1 回から 20 回のスワイプ後にどこでも発生します。

アイコンが 1 つの画面にスワイプしてからアイコンが 2 つの画面に戻ると、消失が悪化するようです。

に呼び出しを追加しようとしましたActivity.invalidateOptionsMenu()が、影響がないようです。たとえば、スワイプ アニメーションが完了した後に呼び出される TabAdapter の onPageScrollStateChanged() にこの呼び出しを追加しました。また、これを Fragments の onResume() に追加するか、TabAdapter.onTabSelected() が終了した後に追加しようとしましたが、役に立ちませんでした。

私は ActionBarSherlock 4.1.0 を使用しています (別の問題のため、最新の android-support-v4.jar に置き換えました)。My Activity は を拡張SherlockFragmentActivityし、単純にインスタンス化しViewPagerます。ViewPager のアダプターのをオーバーライドしFragmentPagerAdapterました (ViewPager Android ドキュメントの標準的な例に従います)。

私の電話は Android 2.3.5 を実行しています。

4

2 に答える 2

6

この問題のいくつかの回避策は、ViewPager / ActionBar、メニュー項目が表示されないに記載されています。項目 8 で説明した修正がうまくいきました。

于 2013-02-04T15:11:06.520 に答える
1

このリンクをたどってください

if (viewPager.getCurrentItem() != position)
  viewPager.setCurrentItem(position);

onCreate で viewPager.setCurrentItem への呼び出しを延期する

public void onCreate(...) {
    ...
    view.post(new Runnable() {
        public void run() {
            // guarded viewPager.setCurrentItem
        }
    }
}
于 2014-10-13T14:49:02.133 に答える