附加到父活动和后退按钮的片段

时间:2016-05-30 09:08:36

标签: android android-fragments

我想问一下BackStackFragments。让我们假设我们在应用程序中有2个按钮。单击每个片段时,新片段将启动并显示在屏幕上。

if (buttonIndex == 0) {
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(android.R.id.content,new FirstFragment());
    ft.addToBackStack("added first");
    ft.commit();
} else if (buttonIndex == 1) {
    FragmentTransaction ft1 = fragmentManager.beginTransaction();
    ft1.replace(android.R.id.content,new SecondFragment());
    ft1.setTransition(ft1.TRANSIT_FRAGMENT_OPEN);
    ft1.addToBackStack("added second");
    ft1.commit();
}

现在你看到发生了什么。但这是我的问题。 我点击第一个和第二个按钮,两个片段都添加到了 堆。没问题:)。但如果我点击让第二个按钮说3次, 那么相应的片段也将运行3次。意思是 我必须单击后退按钮3次才能返回第一个片段。

这应该发生吗?

此致 西奥。

1 个答案:

答案 0 :(得分:2)

你可以add a tag while add/replace一个片段。然后你应该检查是否添加了一次相同的片段。如果是,则删除现有的。

FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("FirstFragment");
if (prev != null) {
    ft.remove(prev);
}
ft.replace(android.R.id.content,new FirstFragment(),"FirstFragment");
ft.addToBackStack("added first");
ft.commit();

DialogFragment实现

中显示了good example