0

我使用 FrameLayout 的持有人活动。

在那里我放了一个带有列表视图的片段。它工作正常。

ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragments, feedFragment);
ft.commit();

然后我添加另一个片段。

android.support.v4.app.Fragment targetFragment = new MainPhotoFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragments, targetFragment);
ft.addToBackStack(null);
ft.commit();

在这里,我使用 add() 而不是 replace() 在回击键时返回到列表视图的先前位置。它工作正常。

但是可以从第二个片段导航到第三个片段。

android.support.v4.app.Fragment targetFragment = new FullPhotoFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragments, targetFragment);
ft.addToBackStack(null);
ft.commit();

在这里,我使用替换来强制第二个片段在回击键时重新加载。

有时来自第三个片段的返回键工作正常,它显示正在重新加载的第二个片段出现。

但有时(正如我在尝试此步骤时第一次看到的那样)从第三个片段回击键会导致我进入第一个片段,而不是我的期望关闭第二个片段。第一个片段正在重新加载。

如何防止这种奇怪的行为?

4

1 回答 1

1

add() 方法会将 Fragments 添加到 Container 中,并且添加到 Container 的任何其他 Fragment 都将排在第一个 Fragment 后面。它们将不可见,除非第一个片段变为不可见。我希望这是您面临的问题。如果您也将 replace() 用于第一个 --> 第二个片段导航,那就太好了。

于 2013-01-05T09:48:35.310 回答