片段之间的Android导航

时间:2014-03-27 11:30:02

标签: android android-fragments android-activity

我有一个分成几个片段的表格。我用每个片段调用:

final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
if(fragment.equals(this.formOne) ||   fragment.equals(this.formTwo)) {
        ft.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
    }

ft.replace(R.id.fragForm, fragment);
ft.addToBackStack(null);
ft.commit();

当我点击后退按钮时,它会跳过上一个片段,然后返回活动但屏幕空白。

例如,我有3个片段:A - B - C

如果我去C并希望回到之前的活动,我点击后退按钮,我就在B上,我再次点击,我在A上,当我再次点击时,我有一个空白屏幕,我需要再次单击以返回上一个活动。

我不明白为什么我的活动上有这个空白屏幕。

我在开发者文档中不明白这一点:

  

注意:您不应该在后台堆栈中添加事务   交易用于水平导航(例如切换标签时)   或者在修改内容外观时(例如调整时)   过滤器)。有关何时返回导航的更多信息   适当的,请参阅导航设计指南。

如果我们不能使用它,那么解决方案是什么?

2 个答案:

答案 0 :(得分:5)

添加片段A时,不要将其添加到Backstack中。

ft.add(R.id.fragForm, fragmentA);
ft.commit();


ft.replace(R.id.fragForm, fragmentB);
ft.addToBackStack(null);
ft.commit();

ft.replace(R.id.fragForm, fragmentC);
ft.addToBackStack(null);
ft.commit();

答案 1 :(得分:1)

如果您不必导航到以前的片段,请不要将其添加到backstack

删除此

 ft.addToBackStack(null);