12

バックプレス後にナビゲーションドロワーの選択状態を処理する適切な方法は何ですか?

Android Studio の SDK サンプルのような n 個のエントリ (リストビュー) を持つナビゲーション ドロワーがあります。ナビゲーション ドロワー エントリをクリックすると、それらをバック スタックに追加して、それらに戻ることができるようにします。

onNavigationDrawerItemSelected(int pos) で私は持っています

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        if (position == 0) {
            transaction.replace(R.id.container, new FragmentA());
        } else if (position == 1) {
            transaction.replace(R.id.container, new FragmentB());
        } else {
            transaction.replace(R.id.container, new FragmentC());
        }
        transaction.addToBackStack(null);
        transaction.commit();

ドロワーの 2 番目のエントリをクリックすると、B が選択され、A が置き換えられます。後で戻るボタンをクリックすると、フラグメント A が再び表示されますが、B はナビゲーション ドロワーで選択されたままです。

押し戻した後、ドロワーの選択ステータスを更新するにはどうすればよいですか?

どういうわけか、mDrawerListView.setItemChecked(position, true); への呼び出しが必要です。または NavigationDrawerFragment.selectItem(int position)。しかし、どの位置に?どうすれば覚えられますか?

onBackPressed で傍受しますか?

@Override
    public void onBackPressed() {}

しかし、どのフラグメントが再びアクティブになったかをどのように知ることができますか? そして、どの位置に対応します。

私が見えない簡単な解決策はありますか?ナビドロワーと組み合わせてバックを使って選択状態を更新するのが定番パターンのようです。

4

7 に答える 7

8

このパターンは、「適切な戻るナビゲーション」ドキュメントの「フラグメントの戻るナビゲーションを実装する」セクションで説明されています。

アクション バーなど、フラグメントの現在の状態を反映するためにアプリケーションが他のユーザー インターフェイス要素を更新する場合は、トランザクションをコミットするときに UI を更新することを忘れないでください。トランザクションをコミットするときだけでなく、バ​​ック スタックが変更された後も、ユーザー インターフェイスを更新する必要があります。aを設定すること で、 a がいつ元に戻されたかをリッスンできます FragmentTransactionFragmentManager.OnBackStackChangedListener

getSupportFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        public void onBackStackChanged() {
            // Update your UI here.
        }
    });

これは、ナビゲーション ドロワーの現在のオプションを更新する適切な場所です。

于 2015-01-07T17:48:32.220 に答える