3

Navigation Drawerネストされたフラグメントを使用しているアプリを作成しています。ナビゲーション ドロワーは、Android のドキュメントとほぼ同じように作成されています。動作します。ナビゲーション ドロワーを常に表示したいので、アクティビティを 1 つ使用し、フラグメントを交換するだけです。フラグメントの 1 つは でViewPager、これにはページとして独自のフラグメントがあります。

ナビゲーションは次のように階層化されています。

- Home
- Fragment 1
-- Subfragment 1.1
-- Subfragment 1.2
-- Subfragment 1.3
- Fragment 2
-- Subfragment 2.1
-- Subfragment 2.2
-- Subfragment 2.3

Fragment は でViewPager、Subfragments はそのページです。Fragment引き出しから移動するとすべて正常に動作しますが、特定のページ (ネストされたフラグメント)に直接切り替える方法がわかりませんViewPager's

ナビゲーション ドロワーのクリックを処理する MainActivity:

@Override
protected void onNavItemSelected(int id) {
    switch ((int)id) {
        case 1:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new MainFragment())
            .addToBackStack(null).commit(); 
            break;
        case 100:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new Fragment1())
            .addToBackStack(null).commit();
            break;
        case 200:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new Fragment2())
            .addToBackStack(null).commit();
            break;
        .
        .
        .
    }    
}

getChildFragmentManager()これはandを使用する必要があると思いますViewPager's setCurrentItem()が、メインアクティビティで最初のものを取得できず (または方法がわからない)、このようなことをするとページャーがまだ作成されていないため、2 番目のものを使用できません:

SubFragment11 a = new SubFragment11();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, a).addToBackStack(null).commit();
a.setCurrentPagerItem(2);
4

1 に答える 1

0

ViewPager フラグメントに、選択した項目を制御するための変数を含む Bundle を提供します。Viewpager が作成されたら、その整数を取得してそのパネルに切り替えます。

于 2013-11-20T21:53:31.810 に答える