片段活动之间的正确反向导航

时间:2015-01-17 20:41:20

标签: java android android-activity android-fragments

我有两项活动:

  1. MainActivity ,它扩展了FragmentActivity并具有
  2. ViewActivity ,它只是一个活动,将MainActivity作为父级。
  3. 从MainActivity的一个片段导航到ViewActivity。 问题是,当我从ViewActivity(按Back按钮)导航到MainActivity时,我得到了活动的第一个片段,丢失了所有碎片的堆叠,我有。

    有没有办法在不丢失Fragments backstack的情况下回到FragmentActivity?我怎样才能回到启动ViewActivity的片段?

    Some kind of visualization

    更新

    以下是我目前来自MainActivity的onCreate的代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Listen for changes in the back stack
        getSupportFragmentManager().addOnBackStackChangedListener(this);
        //Handle when activity is recreated like on orientation Change
        shouldDisplayHomeUp();
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            MainFragment mainFragment = new MainFragment();
            getSupportFragmentManager().beginTransaction()
                .add(R.id.a_main_container, mainFragment)
                .commit();
        }
    }
    

    更新2 最后,发现问题是,当我在ActionBar中单击“向上”按钮时。现在我从ViewActivity中移除了操作栏(只是不需要它),一切正常。通常的后退按钮将我移动到片段3,然后移动到片段2等

    但是可以在ActionBar中使用UpButton做同样的事情吗? (仅供将来使用)

2 个答案:

答案 0 :(得分:1)

似乎您在MainActivity的 onCreate 中实例化 Fragment 1 ,而不检查 savedInstanceState == null 。因此,每次导航回MainActivity时,它都会从头开始修改 Fragment 1 。发布更多代码,以便我指出正确的方向。

回答更新2:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

答案 1 :(得分:0)

我认为你不知道要回到哪个片段。再按一次按钮会发生什么?

查看onCreate()活动的代码

也会有所帮助

我认为你需要做的就是使用saveInstancestate来记住你所在的片段。

我认为这个问题会有所帮助 Once for all, how to correctly save instance state of Fragments in back stack?