所以我发现了一些类似的案例,但没有关于这个具体案例。
我有一个FrameLayout,我给了id“容器”,并包含一些不同的片段。
在我的包含该FrameLayout的活动的代码中,我正在尝试使用接收片段的函数在片段之间切换。
在该代码中:
一个。我已定义private FragmentManager fm = getSupportFragmentManager();
湾我已定义FragmentTransaction ft;
以便稍后使用。
℃。我的职责是:
private void setActiveFragment(Fragment fragment){
//Determine which button should be marked as "active"
determineButtonByFragment(fragment);
//Repalce fragment
ft = fm.beginTransaction();
ft.replace(R.id.container, fragment);
ft.addToBackStack(String.valueOf(fragment.getId()));
ft.commit();
}
知道为什么我会在“替换”上出现这个错误吗?
编辑: 好的,我刚刚意识到片段的更多。由于所有5个片段都被添加到FrameLayout中,因此“替换”将不起作用。当您尝试将片段从1个父视图移动到另一个父视图(或者在此情况下,移动到同一个视图)时,您将获得“无法机会容器ID错误”,而无需先将其分离。 假设我有片段A,B,C,D,E。 如果我现在想要替换片段B,我将无法做到这一点,直到我从它的原始父母中删除它(或者至少我认为它是如何工作的。否则请赐教我)。现在唯一的问题是如何在我的片段之间正确切换......
答案 0 :(得分:2)
好吧,显然你不能在布局中硬编码的片段上使用“替换”方法: Replacing a fragment with another fragment inside activity group
我现在要做的就是在函数内部找到一种方法来确定我想要显示的片段,创建它的新实例,并在其上使用“replace”。