Android 查找当前片段显示在哪个帧中

Android 查找当前片段显示在哪个帧中,android,android-fragments,Android,Android Fragments,我对框架布局中的片段导航有问题。也就是说,我无法找出片段当前显示在哪个帧中 我的设置如下所示: 我有3个父片段(PA、PB、PC),每个片段都有自己独特的框架布局。另外,我有3个子片段(CA、CB、CC)和两个孙子片段(GA、GB) 父片段将childfragments调用到适当的framelayouts中(工作正常),但是现在我希望childfragments用适当的子片段替换自己,但是我无法找到childfragments当前显示在哪个framelayout中。(我希望这是有道理的) 伪代码

我对框架布局中的片段导航有问题。也就是说,我无法找出片段当前显示在哪个帧中

我的设置如下所示: 我有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当前在哪个框架中。然后首先删除子片段,然后添加孙子片段。替换实际上应该执行删除操作(因为替换只是删除,然后添加),但它只是在旧片段的上面显示新片段。现在我有了重叠的片段。如果它们连接在同一个容器中,那么就替换片段,在你的情况下,我理解你的片段放置在不同的容器中