让我先说明问题:
我有一个带ActionBar的ViewPager,每个页面的分页器都是一个分段,每个页面本身都有自己的按钮,用另一个替换当前片段。例如:
我们首先启动应用程序并滑动到第三个选项卡,这里我们使用viewPager onTabchanged方法设置标题并且没有问题,在此页面中我们有按钮并单击它们将用新值替换页面(想想第3个)页面作为主要类别,显示项目列表和按钮,如将我们移动到子类别,这是再次列出的项目)所以,如果我们按两次按钮+我们来到第3页,每次我们替换片段现在我们在backStack中有3个片段!所有我想要的是当onBackButton按下actionBar应该设置正确的标题,这是我试过的:
@Override
public void onBackPressed() {
int mFragmentCount = this.getSupportFragmentManager().getBackStackEntryCount();
super.onBackPressed();
if(mFragmentCount != 0)
{
FragmentManager.BackStackEntry backEntry=getSupportFragmentManager().getBackStackEntryAt(mFragmentCount-1);
String str=backEntry.getName(); //the tag of the fragment
mActionBar.setTitle(str);
}
}
但每次我得到ArrayOutOfIndex错误,例如无效索引2是2!
任何人都能帮助我吗?
谢谢你!答案 0 :(得分:1)
问题是,当你获得mFragmentCount的值时,你在backstack中有x个片段,但是在super.onBackPressed()之后,你有x-1个片段,所以数组中x-1位的片段不存在
答案 1 :(得分:0)
你可以试试这个:
@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count < 2) {
super.onBackPressed();
} else {
FragmentManager.BackStackEntry backStackEntry = getFragmentManager().getBackStackEntryAt(count - 2);
mActionBar(backStackEntry.getName());
getFragmentManager().popBackStack();
}
}