應用程序由Activity
與NavigationDrawer
組成,我們也可以在2級層次結構中打開Fragment
s。在後一種情況下,我們對ActionBar
一個Back Button
實現了通航。
在運行時,一切正常,如果我們通過點擊事件打開2級分層結構中的碎片,但是當我們從代碼執行相同的代碼時 - 導航按鈕不會顯示出來。導航仍然有效。如果我們回到家中,NavigationBar
的漢堡包圖標就會顯示出來,如果我們通過點擊事件打開2級分層結構中的Fragment
,那麼後退按鈕就會顯示出來,而不是漢堡包圖標。
總之:一切又正常工作,如果我們導航回到了家中的水平。向上導航沒有出現,當打開片段不在運行時
的相關方法:
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()
方法由onBackStackChanged()
調用,但沒有任何區別,當我們把它以靜態方式。
主要是我們稱之爲actionBar.setDisplayHomeAsUpEnabled()
和 actionBarDrawerToggle.setDrawerIndicatorEnabled(false)
方法。
如果我們設置應用程序中的提醒,它會觸發通知。當我們點擊通知時,它會打開主屏幕 - 本地級別 - ,列表 - 如上所示 - 然後是與通知相關的待辦事項的詳細視圖。然後我們可以回到視圖層次結構中。這是以編程方式打開碎片的目的。