Android 查找当前片段显示在哪个帧中
我对框架布局中的片段导航有问题。也就是说,我无法找出片段当前显示在哪个帧中 我的设置如下所示: 我有3个父片段(PA、PB、PC),每个片段都有自己独特的框架布局。另外,我有3个子片段(CA、CB、CC)和两个孙子片段(GA、GB) 父片段将childfragments调用到适当的framelayouts中(工作正常),但是现在我希望childfragments用适当的子片段替换自己,但是我无法找到childfragments当前显示在哪个framelayout中。(我希望这是有道理的) 伪代码示例:Android 查找当前片段显示在哪个帧中,android,android-fragments,Android,Android Fragments,我对框架布局中的片段导航有问题。也就是说,我无法找出片段当前显示在哪个帧中 我的设置如下所示: 我有3个父片段(PA、PB、PC),每个片段都有自己独特的框架布局。另外,我有3个子片段(CA、CB、CC)和两个孙子片段(GA、GB) 父片段将childfragments调用到适当的framelayouts中(工作正常),但是现在我希望childfragments用适当的子片段替换自己,但是我无法找到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();
}}
任何意见都将不胜感激
编辑:好的,我已经找到了一个可能的解决方案,将ViewGroup容器保存在onCreateView中,并将其传递给trx.replace函数。
但不幸的是,我收到了以下消息:java.lang.IllegalArgumentException:id 0x7f0c0057(de.tel.quenference.activities:id/sara_content_view)的片段PaperviewFragment{421da470#2 id=0x7f0c0057}
找不到任何视图,因为该视图与我所在的视图相同,或者?
我错过了什么?好吧,我知道了,我有点想自杀。 首先,“
No View Found
”错误源于这样一个事实,即我的parentfragment没有调用transaction.addToBackStack
(我将其添加到示例代码中,但不是我的生产代码中…)
不幸的是,仅仅把它放进去并不能解决所有问题,但我还必须将ParentFragment更改为不调用getChildFragmentManager
,而是调用普通的FragmentManager
否则,片段将不会出现在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();
}}
为什么你不能使用R.id.content\u view\u a?如果您在这个框架中显示子片段,那么您应该将R.id.content\u view\u a中的内容替换为不起作用的孙子,因为我不知道孙子片段应该放在哪个内容框架中,所以我不能静态地定义它。我需要孙子片段来替换childfragment,无论childfragment当前在哪个框架中。然后首先删除子片段,然后添加孙子片段。替换实际上应该执行删除操作(因为替换只是删除,然后添加),但它只是在旧片段的上面显示新片段。现在我有了重叠的片段。如果它们连接在同一个容器中,那么就替换片段,在你的情况下,我理解你的片段放置在不同的容器中