查找当前片段显示的帧

时间:2014-09-12 06:52:39

标签: android android-fragments

我在框架布局中遇到片段导航问题。即我无法找到片段当前显示在哪个帧中。

我的设置如下: 我有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}这对我来说没什么意义,因为视图和我一样,或者? 我错过了什么?

1 个答案:

答案 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();
     }}