Android Xamarin:FragmentManager.FindFragmentByTag 为空
Android Xamarin: FragmentManager.FindFragmentByTag is null
我正在努力更好地理解 FragmentMananger。
我 "inflate" 我的片段在 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
仍然为空
尝试将标签更改为静态的。像这样。
myFragment = new MyFragment();
FragmentManager.BeginTransaction()
.Add(Resource.Id.FrameLayout, myFragment, "MyFragmentTag")
.Commit();
FragmentManager.FindFragmentByTag<MyFragment>("MyFragmentTag");
你可以在Commit
方法之后使用executePendingTransactions方法,它会立即执行。
也可以参考this案例。
这里是demo based on your last 。我在项目中添加了一些代码:
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();
}
我正在努力更好地理解 FragmentMananger。
我 "inflate" 我的片段在 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
仍然为空
尝试将标签更改为静态的。像这样。
myFragment = new MyFragment();
FragmentManager.BeginTransaction()
.Add(Resource.Id.FrameLayout, myFragment, "MyFragmentTag")
.Commit();
FragmentManager.FindFragmentByTag<MyFragment>("MyFragmentTag");
你可以在Commit
方法之后使用executePendingTransactions方法,它会立即执行。
也可以参考this案例。
这里是demo based on your last
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();
}