アプリケーションはActivity
とNavigationDrawer
で構成され、Fragment
も2レベル階層で開くことができます。後者の場合は、ActionBar
にBack Button
があり、これはナビゲーションを実装するためのものです。
2つのレベルの階層でフラグメントをクリックイベントでクリックすると、すべてがうまく動作しますが、コードから同じコードを使用すると、ナビゲーションボタンは表示されません。ナビゲーションは引き続き機能します。ホームレベルに戻ると、NavigationBar
のハンバーガーアイコンが表示され、クリックイベントで2レベル階層のFragment
を開くと、ハンバーガーアイコンの代わりに戻るボタンが表示されます。
要するに、ホームレベルに戻ると、すべて正常に動作します。実行時にフラグメントが開いていないときに表示
関連の方法:onBackStackChanged()
によって呼び出さ
private void shouldDisplayHomeAsUp() {
FragmentManager fragmentManager = getSupportFragmentManager();
boolean shouldDisplay = fragmentManager.getBackStackEntryCount()>0;
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(shouldDisplay);
CharSequence actionBarTitle = actionBar.getTitle();
if (isMainListFragment(shouldDisplay, actionBarTitle)) {
actionBar.setTitle(R.string.app_name);
setDrawerEnabled(true);
}
}
}
private void setDrawerEnabled(boolean enabled) {
if (!enabled) {
disableDrawer();
enableActionBarBackNavigation();
} else {
enableDrawer();
}
}
private void disableDrawer() {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
actionBarDrawerToggle.setDrawerIndicatorEnabled(false);
actionBarDrawerToggle.syncState();
}
private void enableDrawer() {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
actionBarDrawerToggle.syncState();
}
private void enableActionBarBackNavigation() {
actionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}
shouldDisplayHomeAsUp()
方法が、私たちは、静的な方法でそれを呼び出す何の違いは、ありません。
ほとんどの場合、actionBar.setDisplayHomeAsUpEnabled()
と actionBarDrawerToggle.setDrawerIndicatorEnabled(false)
というメソッドがあります。
我々はアプリケーションにリマインダーを設定した場合、それは通知をトリガします。通知をクリックすると、メイン画面(ホームレベル)、aリスト(上に表示されているように)、通知の詳細ビューが表示されます。その後、ビューの階層に戻ることができます。これはプログラムでフラグメントを開くための目的です。