Android Xamarin:FragmentManager.FindFragmentByTag为null

时间:2018-05-03 10:27:54

标签: android xamarin.android fragmentmanager

我想更好地了解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

仍为空

2 个答案:

答案 0 :(得分:1)

您可以在Commit方法之后使用executePendingTransactions方法,它会立即执行。

您还可以参考this案例。

以下是基于您上次democase。我在项目中添加了一些代码:

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

答案 1 :(得分:0)

尝试将标记变为静态。像这样。

myFragment = new MyFragment();
FragmentManager.BeginTransaction()
               .Add(Resource.Id.FrameLayout, myFragment, "MyFragmentTag")
               .Commit();

FragmentManager.FindFragmentByTag<MyFragment>("MyFragmentTag");