使用ViewPager管理ActionBar标题onBackPressed

时间:2015-01-14 14:41:23

标签: android android-fragments android-viewpager title onbackpressed

让我先说明问题:

我有一个带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!

任何人都能帮助我吗?

谢谢你!

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();
    }
}