Android 如何在遍历片段回栈期间刷新ActionBar导航项?
Android 4.1 ActionBar提供了一个有用的导航模式,可以是列表或选项卡。我正在使用SpinnerAdapter从要显示在view android.R.id.content中的三个片段中进行选择。 onNavigationItemSelected侦听器然后将每个片段膨胀到视图中,并使用FragmentTransaction.addToBackStacknull将其添加到后堆栈中 这一切都是宣传的,但我不知道如何更新ActionBar以反映当前的后台堆栈。使用ActionBar.setSelectedNavigationItemposition可以工作,但也会触发一个新的OnNavigationListener,这也会创建另一个FragmentTransaction,而不是我想要的效果。代码如下所示,以供澄清。感谢您对解决方案的任何帮助Android 如何在遍历片段回栈期间刷新ActionBar导航项?,android,android-fragments,android-actionbar,Android,Android Fragments,Android Actionbar,Android 4.1 ActionBar提供了一个有用的导航模式,可以是列表或选项卡。我正在使用SpinnerAdapter从要显示在view android.R.id.content中的三个片段中进行选择。 onNavigationItemSelected侦听器然后将每个片段膨胀到视图中,并使用FragmentTransaction.addToBackStacknull将其添加到后堆栈中 这一切都是宣传的,但我不知道如何更新ActionBar以反映当前的后台堆栈。使用ActionBar.se
你可以这样做: 根据“后退”按钮选择导航项目时,创建要跟踪的布尔值:
private boolean mListIsNavigatingBack = false;
Override onBackPressed,在Override中,检查backbackback是否有项,如果有,请自行处理,如果没有,请调用超类:
public void onBackPressed() {
if(getFragmentManager().getBackStackEntryCount() > 0){
mListIsNavigatingBack = true;
//You need to get the previous index in the backstack through some means
//possibly by storing it in a stack
int previousNavigationItem = ???;
getActionBar().setSelectedNavigationItem(previousNavigationItem);
}
else{
super.onBackPressed();
}
}
在NavigationListener中,处理mListIsNavigatingBack状态,手动弹出后堆栈并取消设置状态:
if(mListIsNavigatingBack){
if(fm.getBackStackEntryCount() > 0){
fm.popBackStack();
}
mListIsNavigatingBack = false;
}
感谢您的建议,我用堆栈实现了这些建议。考虑到增加的复杂性和独特的用户体验,我正在重新考虑这个设计模式。在使用ActionBar导航时,最好不要添加BackStack?列表导航确实会使它变得复杂。通常,后堆栈更多地用于交换当前视图中的片段,因此,也许可以通过重新附加背景中的片段来简化用例。
if(mListIsNavigatingBack){
if(fm.getBackStackEntryCount() > 0){
fm.popBackStack();
}
mListIsNavigatingBack = false;
}