0

應用程序由ActivityNavigationDrawer組成,我們也可以在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)方法。

見下面的圖片: left is the proper one

如果我們設置應用程序中的提醒,它會觸發通知。當我們點擊通知時,它會打開主屏幕 - 本地級別 - ,列表 - 如上所示 - 然後是與通知相關的待辦事項的詳細視圖。然後我們可以回到視圖層次結構中。這是以編程方式打開碎片的目的。

回答

1

我解決了這個問題。
修改的方法是這樣的:

private void shouldDisplayHomeAsUp() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    boolean shouldDisplay = fragmentManager.getBackStackEntryCount()>0; 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
    if (shouldDisplay) { 
     setDrawerEnabled(false); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } else { 
     actionBar.setDisplayHomeAsUpEnabled(false); 
     setDrawerEnabled(true); 
    } 

    CharSequence actionBarTitle = actionBar.getTitle(); 
    if (isMainListFragment(shouldDisplay, actionBarTitle)) { 
     actionBar.setTitle(R.string.app_name); 
     actionBar.setDisplayHomeAsUpEnabled(false); 
     setDrawerEnabled(true); 
    } 
    } 
} 

setDrawerEnabled(false)actionBar.setDisplayHomeAsUpEnabled(true)方法調用的順序是非常重要的。這是問題的根源。

相關問題