バックプレス後にナビゲーションドロワーの選択状態を処理する適切な方法は何ですか?バックプレス後のナビゲーションドロワーの選択状態の更新
AndroidスタジオのSDKサンプルのように、n個のエントリを持つナビゲーションドロワーが(リストビュー内に)あります。 ナビゲーション・ドロワーの項目をクリックすると、それらをバック・スタックに追加したいので、私は戻ってそれらに移動できます。
私は引き出しの2番目のエントリで私をクリックすると 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();
、Bが選択されますしていると私はその後、バックボタンをクリックした場合A.を置き換え、フラグメントAが再び示されonNavigationDrawerItemSelected(int型POS)で
それはすべきだが、ナビゲーション・ドロワーではまだBが選択されている。
戻るを押した後にドロワの選択ステータスを更新するにはどうすればよいですか?
何とかmDrawerListView.setItemChecked(position、true)を呼び出す必要があります。またはNavigationDrawerFragment.selectItem(int position)です。しかし、どのポジションに?どのように私はそれを思い出すのですか?
onBackPressedでの代行受信?
@Override
public void onBackPressed() {}
しかし、どのフラグメントが再びアクティブになっているかはどのようにわかりますか?そして、どのポジションに対応しているのか。
私には見えない簡単な解決策がありますか?ナビゲーション・ドロワと組み合わせてバックを使用し、選択状態を更新することが標準的なパターンであると思われる。
これは、更新するときにのみ質問に答えます。私はonBackPressed()を使うこともできます。主な問題は、引き出し内のどの位置を強調表示するかです。私はおそらく古い、今は "アクティブな"フラグメントとonNavigationDrawerItemSelectedのそれと逆のマッピングフラグメント - >位置を取得する必要があります。おそらく、setTargetFragmentで要求コードとしての位置を格納していますか? – spatialist
@spatialistはい、それはうまくいくでしょうし、Fragmentの 'onCreateView()'でドロワに通知します。それにもかかわらず、私はまだonBackPressed()の代わりにリスナーを使うことを提案します。例えば、「戻る」を押すことによって、現在のフラグメントを実際に変更することはできない(例えば、検索ビューを閉じる)。 – matiash