6

私は ActionBarSherlock を使用しており、ビューページャーを使用してネストされたフラグメント構造を実装しようとしています。

いくつかのビューとラッパー フラグメント (FragmentA) を含むアクティビティがあります。

この FragmentA には、FragmentA.1、FragmentA.2、FragmentA.3 を示すビュー ページャーが含まれています。

ここで説明されているように、デフォルトでは、onCreateOptionsMenu イベントは子フラグメントにディスパッチされません。そのため、このソリューションを使用して問題を解決しています。

APIレベル17以上でうまく機能しますが、以下では最初のフラグメントのオプションメニューが表示されませんが、他のフラグメントにスクロールするとすべてが正常に機能し始めます. 親フラグメントから onCreateOptionsMenu を呼び出してみましたが、結果はありません。最初のフラグメントに戻るときにも機能します。

助言がありますか?

アップデート :

構造をより明確に表現する方法:

ラッパー フラグメントとは、viewpager を保持するフラグメントを意味します。だから構造は

ACTIVITY 
        -> WRAPPER FRAGMENT (holds viewpager and passes childfragmentmanager to adapter(FragmentPagerAdapter) as fragmentmanager) (parent is activity)
             -> CHILDFRAGMENTS(items of viewpager) (parent is wrapper fragment but viewpager manages its framelayout)

また、あまり良くない一時的な解決策を見つけました:

if(Build.VERSION.SDK_INT > 17){

            pager.setCurrentItem(1,false);

        } else {

            new android.os.Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    pager.setCurrentItem(1, true);
                }
            }, 300);


        }
4

2 に答える 2

3

おそらく、アクティビティの作成が終了する前に、ビュー ページャーを初期化します。
子フラグメントはオプション メニューを作成しますが、アクティビティによってすべてのオプション メニューが無効になるため、これが問題になります。ラッパー フラグメントのメソッド
内でページャーを初期化する必要があります。onActivityCreated

于 2014-05-09T08:57:33.617 に答える
1

編集

if(viewPagerAdapter.getItem(view_pager.getCurrentItem()) instanceof FragmentToFind)
{
    FragmentToFind fragment = (FragmentToFind) viewPagerAdapter.getItem(view_pager.getCurrentItem());

    fragment.onCreateOptionsMenu(menu, inflater);
}
于 2013-11-25T10:03:47.373 に答える