首页 > 解决方案 > Android Xamarin:FragmentManager.FindFragmentByTag 为空

问题描述

我试图更好地理解 FragmentMananger。

我在 FrameLayout 中“膨胀”了我的片段,效果很好。

var fragmentTag = typeof(MyFragment).Name;
myFragment = new MyFragment();
FragmentManager.BeginTransaction()
               .Add(Resource.Id.FrameLayout, myFragment, fragmentTag)
               .Commit();

但现在的问题是,我什么时候可以通过 TagSearch 找到我的片段。因为在 BeginTransaction() 之后

FragmentManager.FindFragmentByTag<MyFragment>(typeof(MyFragment).Name

仍然为空

标签: androidxamarin.androidfragmentmanager

解决方案


您可以在方法之后使用executePendingTransactionsCommit方法,它将立即执行。

你也可以参考这个案例。

这是基于您最后一个案例的演示。我在项目中添加了一些代码:

FragmentTransaction fragmentTransaction = FragmentManager.BeginTransaction();
Fragment1 fragment = (Fragment1)FragmentManager.FindFragmentByTag(FRAGMENT_TAG);
if (fragment == null)
{
    fragment = new Fragment1();
    fragmentTransaction.Add(fragment, FRAGMENT_TAG).Commit();
    FragmentManager.ExecutePendingTransactions();
}

Fragment1 f=FragmentManager.FindFragmentByTag<Fragment1>(typeof(Fragment1).Name);
if (f != null)
{
    Toast.MakeText(this, "Fragment1 is not null", ToastLength.Short).Show();
}
else
{
    Toast.MakeText(this, "Fragment1 is  null", ToastLength.Short).Show();
}

推荐阅读