【问题标题】:findFragmentByTag always returning null on trying to retrieve after add()findFragmentByTag 在 add() 之后尝试检索时总是返回 null
【发布时间】:2013-08-21 15:29:24
【问题描述】:

我有两个片段,我需要保留它们,但在按钮点击时显示和隐藏。

我使用以下方法添加了第一个片段:

FragmentTransaction transaction = getSupportFragmentManager()
    .beginTransaction();
    mDishFragment = new DishFragment();
    transaction.add(R.id.dish_fragment, mDishFragment, "DishFragment");
    transaction.commit();

第一个片段(DishFragment)有一个点击按钮,代码检查“OrderSummaryFragment”是否存在(使用findFragmentbyTag),如果存在,它应该显示()它否则添加()一个新的。这是代码:

 FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    if (getFragmentManager().findFragmentByTag("OrderSummaryFragment") == null) {
        System.out.println("OrderSummaryFragment not found");
         transaction.add(R.id.dish_fragment, mOrderSummaryFragment,"OrderSummaryFragment");
         System.out.println("Orderfragment added");
         transaction.addToBackStack(null);
         transaction.commit();
    }else{
        System.out.println("OrderSummaryFragment found");
        transaction.hide(mDishFragment);
        transaction.show(mOrderSummaryFragment);
        transaction.commit();
    }

自从“OrderSummaryFragment”不存在以来,代码第一次添加了一个并显示出来。 “OrderSummaryFragment”上有一个后退按钮,按下该按钮的 show() 向上显示第一个片段“DishFragment”。 第二次,由于我们之前已经添加了“Ordersummaryfragment”,所以 findFragmentByTag 应该返回 OrderSummaryFragment 但它返回 null。

注意:我没有使用 replace(),因为我想重用这两个片段。

希望有人可以帮助我。

【问题讨论】:

标签: android android-fragments


【解决方案1】:

您的片段应该在 if 结构中使用 getSupportFragmentManager() 而不是 getFragmentManager Method() 来搜索您的片段。

顺便说一句,那个 R.id.dish_fragment 对象是什么?一个片段?一个容器?它应该是一个类似于 LinearLayout 的容器。

【讨论】:

  • 谢谢哥们,真不敢相信我错过了 :) 是的,R.id.dish_fragment 是片段的容器。
  • 请看我的相关问题:stackoverflow.com/questions/24833912/…
  • 两个方法都返回一个FragmentManager,所以应该是一样的。
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2017-12-22
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多