Navigation Drawerを使用する場合、Android開発者は、ActionBarで「Navigation Drawerで表される画面のみに実際にNavigation Drawer画像を表示する」ことと、「他のすべての画面に従来のアップカラットを設定する」ことを推奨しています。
詳細はこちらをご覧ください:http : //youtu.be/F5COhlbpIbY
1つのアクティビティを使用して複数のレベルのフラグメントを制御し、ナビゲーションドロワーの画像を取得してすべてのレベルで機能させることができます。
下位レベルのフラグメントを作成するときに、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を「更新」する方法に関する提案はありますか?
解決
トムの提案は私のために働いた。これが私がしたことです:
主な活動
このアクティビティは、アプリ内のすべてのフラグメントを制御します。
新しいフラグメントを準備して他のフラグメントを置き換えるとき、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
、<が押されるたびに、onBackPressed()
アクティビティからを呼び出して、階層の1つ上のレベルに移動し、ナビゲーションドロワーイメージを表示します。
@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;
…
}
.replace(R.id.frag_layout
。これがもう1つの階層レベルである場合.add
は、バックスタックにそれを期待します。
theDrawerToggle.setDrawerIndicatorEnabled(false);
フラグメントの内部をどのように参照しますか?Main Activityクラスファイルで宣言されていると思います。これを参照する方法が見つかりません。ヒントはありますか?
setDisplayOptions()
、ToolbarWidgetWrapper
(内部android.support.v7.internal.widgetパッケージの)内のメソッドは、同じフラグメントを2回目に入力したときにアイコンを再作成しません。他の人もこの問題に遭遇したときのために、これをここに残してください。