0

アプリケーションはActivityNavigationDrawerで構成され、Fragmentも2レベル階層で開くことができます。後者の場合は、ActionBarBack 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)というメソッドがあります。

は下の写真を参照してください。 left is the proper one

我々はアプリケーションにリマインダーを設定した場合、それは通知をトリガします。通知をクリックすると、メイン画面(ホームレベル)、aリスト(上に表示されているように)、通知の詳細ビューが表示されます。その後、ビューの階層に戻ることができます。これはプログラムでフラグメントを開くための目的です。

答えて

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)メソッド呼び出しの順序は非常に重要です。それが問題の根本的な原因でした。

関連する問題