我有一个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,因为它是当前的可见。
我该如何解决这个问题?
答案 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