连接到父级活动和后退按钮的片段
问题描述:
我想问一些关于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次才能回到第一个片段。
这是应该发生?
Regards, Theo。
答
你可以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();
一个good example如果您不希望新的实例每次被堆叠单击该按钮,然后不创建新实例,并添加到堆栈中如下所示的DialogFragment实施
。其实并没有硬性规定。如果用户想要返回的前一个片段中的数据,即每个后续片段与前一个片段相关,则应堆叠它们,否则如果它们不相关则不堆叠它们。 –
使用'fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); ' –
@ BOUTERBIAT Qualid。我刚刚尝试过。该片段仍然运行3次,但不是进入前一个片段,而是返回主活动屏幕。 – Theo