findFragmentByTag总是在尝试在add()之后检索时返回null

时间:2013-08-21 15:29:24

标签: android android-fragments

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

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

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()因为我想重用这两个片段。

希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

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

顺便说一句,这是什么R.id.dish_fragment对象?一个片段?一个容器?它应该是像LinearLayout这样的容器。