Android Xamarin: FragmentManager.FindFragmentByTag имеет значение null - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь лучше понять 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 голосов
/ 07 мая 2018

Вы можете использовать executePendingTransactions метод после Commit метода, он будет выполнен немедленно.

И вы также можете обратиться к этому делу.

Вот демоверсия , основанная на вашем последнем случае . Я добавил несколько кодов в проект:

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();
}
0 голосов
/ 03 мая 2018

Попробуйте поменять тег на что-нибудь статичное Вот так.

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

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