Android 開発者は、Navigation Drawer を使用する場合、ActionBar では「Navigation Drawer で表される画面のみが実際に Navigation Drawer 画像を持つべきである」こと、および「他のすべての画面には従来のアップカラットがある」ことを推奨しています。
詳細はこちら:http: //youtu.be/F5COhlbpIbY
1 つのアクティビティを使用して複数のレベルのフラグメントを制御しており、Navigation Drawer の画像をすべてのレベルで表示および機能させることができます。
下位レベルのフラグメントを作成するときに、 を呼び出してActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
ナビゲーション ドロワーの画像を非表示にし、アップ キャレットを表示することができます。
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
私が抱えている問題は、元のナビゲーション ドロワー イメージの代わりにアップ カラットがまだ表示されているトップ レベルのフラグメントに戻るときです。トップ レベルのフラグメントの ActionBar を「更新」して、Navigation Drawer の画像を再表示する方法について何か提案はありますか?
解決
トムの提案はうまくいきました。これが私がしたことです:
主な活動
このアクティビティは、アプリ内のすべてのフラグメントを制御します。
他のフラグメントを置き換える新しいフラグメントを準備するときは、DrawerToggleを次のsetDrawerIndicatorEnabled(false)
ように設定します。
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
次に、 のオーバーライドでonBackPressed
、DrawerToggle を次のsetDrawerIndicatorEnabled(true)
ように設定して上記を元に戻しました。
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
LowerLevelFragments で
onCreate
私が変更したフラグメントでは、次のonOptionsItemSelected
ようになります。
オプション メニューの構成を有効にするために追加onCreate
されました。setHasOptionsMenu(true)
また、アクションバーで<setDisplayHomeAsUpEnabled(true)
を有効にするように設定します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
<が押されるたびにアクティビティから が呼び出されonOptionsItemSelected
、階層内で 1 レベル上に移動し、Navigation Drawer Image が表示されます。onBackPressed()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}