【问题标题】:Android How back button returns previous fragment?Android后退按钮如何返回上一个片段?
【发布时间】:2015-02-05 05:48:23
【问题描述】:

我在 FragmentPagerAdapter 中有 4 个片段。

当我在第4个fragment按返回键时,可以返回到上一个fragment,可能是第3个或第2个fragment。

但是如果前一个是第三个,点击返回按钮后应用会自动退出。我想要的是用户单击第 4 个片段上的后退按钮后,应用程序可以停留在第 3 个片段上而不会自动退出。发生这种情况的原因是当用户单击返回按钮时,两个相邻的片段会同步执行操作。

如何实现?谢谢。

 public void onBackPressed() {
        moveTaskToBack(true);

        System.out.println(123456);

        ViewPager mViewPager = (ViewPager) this.findViewById(R.id.pager);

       App atp =  this.getApplication();
        int count = atp.getFragmentStack().size();
        if (count == 0) {

            //additional code
        } else {


            mViewPager.setCurrentItem(2);


        }
    }

UPDATES(回答评论1): 我的应用程序使用 FragmentPagerAdapter , 所以我想用

ViewPager mViewPager = (ViewPager) this.findViewById(R.id.pager); mViewPager.setCurrentItem(2);

改变片段。 commit不行,我还要改选择栏。

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    您需要将片段添加回堆栈或替换:

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(here_your_fragment);
        //OR ADD
        //fragmentTransaction.add(here_your_fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit(); 
    

    所以你的解决方案是:

    在活动中创建变量

    public int fragmentPosition;
    

    然后,将您的活动或片段的价值放入您的适配器中。在您的片段实例化或将片段的位置传递给fragmentPosition 的值的方法中,像这样

    yourActivityOrFragment.fragmentPosition = position;
    

    然后,在方法@​​987654325@ 中检查片段的位置

    public void onBackPressed() {
        if (fragmentPosition == 3) {
             finish();
        } else {
             super.onBackPressed();
        }
    }
    

    【讨论】:

    • 同一个 FragmentPagerAdapter 下的两个 Fragment。所以覆盖 onBackPressed() ,两个片段同时调用函数。
    • 感谢您的回答,巴兹尔。有个问题,如果我在第3页下,按返回键,(假设我是从第2页来的),应该回到第2页,而不是退出。实际上,如果我使用这种方法,当您在第 4 页按下返回按钮时,它仍然会在第 3 页退出。我使用 mViewPager.setCurrentItem(2);
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 2020-03-28
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2014-10-10
    • 2016-10-06
    • 1970-01-01
    相关资源
    最近更新 更多