我有一个带有ViewPager的活动,ViewPager的每个页面都有一个片段。
在我的Screen3Fragment中,我有一个LinearLayout(lly_fragments),其中我正在显示一些其他片段。 我首先显示Screen3_1片段。
正如我在其他答案中所读到的,
在我的Screen3Fragment中,我有一个LinearLayout(lly_fragments),其中我正在显示一些其他片段。 我首先显示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.....
,我不确定原因是什么。
Screen3Fragment
中吗?在我的Screen3_1Fragment
中吗?还是两个都要?为什么?我读到当从片段中使用片段时,应调用子管理器。 - codeKiller