【发布时间】:2015-03-03 23:26:00
【问题描述】:
我有一个导航抽屉,可以在几个活动之间转换。在每个活动中,我都有一个可能启动其他片段的基本片段。我希望当我在基本片段中时显示导航抽屉切换图标,但是当我添加另一个片段时,我需要显示后退箭头。
我一直在关注 riwnodennyk 提出的示例: Switching between Android Navigation Drawer image and Up caret when using fragments
但这对我不起作用。箭头确实出现了,但我无法单击它。当点击它时没有任何反应。
非基础片段中的OptionsMenuListner:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
Log.d("HERE", "HERHEHREHREHddddddREe");
return false;
}
我确实调用了 setHasOptionsMenu(true);在片段中。
导航片段的相关部分:
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
setActionBarArrowDependingOnFragmentsBackStack();
if (!isAdded()) return;
getActivity().invalidateOptionsMenu();
if (mCallbacks != null && nextSelectedPosition != mCurrentSelectedPosition) {
mCurrentSelectedPosition = nextSelectedPosition;
mCallbacks.onNavigationDrawerItemSelected(nextSelectedPosition);
}
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
setDrawerIndicatorEnabled(true);
if (!isAdded()) return;
getActivity().invalidateOptionsMenu();
}
};
mActionBarDrawerToggle.setHomeAsUpIndicator(R.drawable.appbar_back);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mActionBarDrawerToggle.syncState();
}
});
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
((BaseNavigationActivity)getActivity()).getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
}
private FragmentManager.OnBackStackChangedListener
mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Log.d("TAG", "Back stack was called");
setActionBarArrowDependingOnFragmentsBackStack();
}
};
private void setActionBarArrowDependingOnFragmentsBackStack() {
int backStackEntryCount =
((BaseNavigationActivity)getActivity()).getSupportFragmentManager().getBackStackEntryCount();
Log.d("TEST", "Back Stack Count: " + backStackEntryCount);
mActionBarDrawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}
【问题讨论】:
标签: android android-actionbar navigation-drawer back-stack android-toolbar