使用带有可见片段的onBackPressed

时间:2016-08-16 09:33:31

标签: android android-fragments

我有一个Activity里面有一个ViewPager,里面有5个片段,还有一个底部布局,里面有可以在viewpager页面之间切换的按钮,但是这个片段中的每个片段都可以打开一个新片段,我正在替换片段中的片段。 MainActivity如下:

FragmentManager fragmentManager = getSupportFragmentManager();

Fragment placeDetailsFragment = new PlaceDetailsFragment();
fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out).replace(rootViewID, placeDetailsFragment, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit();

其中rootViewId是页面中根布局的id。

我的想法是,我可以从viewpager中的第1页进入片段1,从第2页进入片段2 ..等等。

我希望能够按下片段1中的硬件后退按钮返回到第1页,当我在片段2中返回到第2页时,默认的onBackPressed行为只会弹出最后添加到片段的片段堆栈,无论哪一个是可见的,所以如果我打开片段1然后片段2然后我从前面提到的活动的底部视图返回到第1页并按下它的弹出片段2,它应该弹出片段1,因为它是当前的可见。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

保存最后一个片段:

Fragment lastFrag;
FragmentManager fragmentManager = getSupportFragmentManager();

Fragment placeDetailsFragment = new PlaceDetailsFragment();
fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out).replace(rootViewID, placeDetailsFragment, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit();

lastFrag = placeDetailsFragment;

覆盖onBackPressed以弹出保存的片段:

@Override
public void onBackPressed() {

    FragmentManager fragmentManager = getSupportFragmentManager();

    fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out)
       .replace(rootViewID, lastFrag, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit();

}

注意 lastFrag 而不是onBackPressed()中的.replace中的 placeDetailsFragment