我在框架布局中遇到片段导航问题。即我无法找到片段当前显示在哪个帧中。
我的设置如下: 我有3个父片段(PA,PB,PC),每个片段都有自己独特的framelayout。另外我有3个Childfragments(CA,CB,CC)和两个Grandchildfragments(GA,GB)
父片段将childfragments调用到适当的framelayouts(工作正常),但现在我希望childfragments用适当的孙子替换自己,但我无法找到当前显示的子片段在哪个framelayout中。 (我希望这是有道理的)
伪代码示例:
public class Parent extends Fragment{
//lots of stuff here
public void replaceFragmentWithChild(){
Fragment frg = new childFragment();
FragmentManager mgr = ((FragmentActivity) getActivity()).getSupportFragmentManager();
FragmentTransaction trx = mgr.beginTransaction();
trx.addToBackStack(null);
trx.replace(R.id.content_view_a, childFragment).commit();
}
}
public class Child extends Fragment{
//lots of stuff here
public void replaceFragmentWithGrandChild(){
Fragment frg = new GrandChildFragment();
FragmentManager mgr = ((FragmentActivity) getActivity()).getSupportFragmentManager();
FragmentTransaction trx = mgr.beginTransaction();
trx.addToBackStack(null);
//here is the problem. I would like to call trx.replace(GET-CURRENT-CONTENT-VIEW, frg)
trx.replace(???, frg).commit();
}}
非常感谢任何意见。
编辑:好的,我通过在onCreateView中保存ViewGroup容器并将其传递给trx.replace函数找到了可能的解决方案。
但不幸的是,我收到以下消息:java.lang.IllegalArgumentException: No view found for id 0x7f0c0057 (de.tel.quenference.activities:id/sara_content_view) for fragment PaperviewFragment{421da470 #2 id=0x7f0c0057}
这对我来说没什么意义,因为视图和我一样,或者?
我错过了什么?
答案 0 :(得分:0)
好吧,我想出来了,我有点想拍自己。
首先,' No View Found
'错误源于这样一个事实:我的父片段没有调用transaction.addToBackStack
(我将它添加到我的示例代码中,但不是我的生产代码......)
遗憾的是,只是把它放在一边,但我不得不将ParentFragment更改为不调用getChildFragmentManager
,而是正常FragmentManager
否则,grandchildfragment不会出现在frameLayout中。
基本上我的工作代码如下:
public class Parent extends Fragment{
//lots of stuff here
public void replaceFragmentWithChild(){
Fragment frg = new childFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
trx.addToBackStack(null);
trx.replace(R.id.content_view_a, childFragment).commit();
}
}
public class Child extends Fragment{
private ViewGroup locContainer;
//lots of stuff here
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
locContainer = container;
return super.onCreateView(inflater, container, savedInstanceState);
}
public void replaceFragmentWithGrandChild(){
Fragment frg = new GrandChildFragment();
FragmentTransaction trx = getFragmentManager().beginTransaction();
trx.addToBackStack(
trx.replace(locContainer.getId(), frg).commit();
}}