gpt4 book ai didi

android - 如何替换 fragment 中的 fragment ?

转载 作者:太空狗 更新时间:2023-10-29 14:42:33 24 4
gpt4 key购买 nike

我有一个带有 ViewPager 的 Activity,ViewPager 的每个页面都有一个 Fragment。

在我的 Screen3Fragment 中,我有一个 LinearLayout (lly_fragments),我在其中显示了一些其他 fragment 。我首先显示 fragment Screen3_1

public class Screen3Fragment extends Fragment {

private FragmentManager manager;
private FragmentTransaction transaction;


public static Screen3Fragment newInstance() {
final Screen3Fragment mf = new Screen3Fragment();
return mf;
}

public Screen3Fragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View v = inflater.inflate(R.layout.fragment_screen3, container, false);
Screen3_1Fragment frag31 = new Screen3_1Fragment();
manager = getChildFragmentManager();
transaction = manager.beginTransaction();
transaction.add(R.id.lly_fragments,frag31,"frag31");
transaction.addToBackStack("frag31");
transaction.commit();
return v;
}

}

这工作正常,没有问题。当我想从 frag31(位于 Screen3Fragment 内)中调用 fragt32 时,问题就来了,为此我执行以下操作。

public class Screen3_1Fragment extends Fragment {

private ImageButton imgbt_timer;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

View v = inflater.inflate(R.layout.fragment_screen3_1,container,false);
imgbt_timer = (ImageButton) v.findViewById(R.id.bT_scr31_timer);
imgbt_timer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getChildFragmentManager().beginTransaction()
.replace(R.id.lly_fragments, new Screen3_2Fragment(), "frag32")
.commit();
}
});


return v;
}
}

正如我在其他答案中读到的那样,行 transaction.replace 应该可以解决问题,并用给定的 frag32 替换现有的 frag31相同的给定容器 lly_fragments

但是,我得到 java.lang.IllegalArgumentException: No view found for id..... 我不知道为什么。

最佳答案

getFragmentManager()将始终返回来自父级的属性,在大多数情况下是 Activity 。 getChildFragmentManager()将返回父属性(在您的例子中,Screen3Fragment 属性)。当您在 fragment 中添加 fragment 时应该使用它。

在你的例子中,Screen3Fragment应使用 getFragmentManager() 添加和 Screen3_1Fragment应使用 getChildFragmentManager() 添加因为Screen3_1FragmentScreen3Fragment child 。 Screen3Fragment是 parent 。

我建议您始终使用 getFragmentManager()add方法,不是 replace因为你的 parent 将是一样的。

getChildFragmentManager()可以在 fragment 内添加 ViewPager 时使用。

关于android - 如何替换 fragment 中的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45435687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com