Фрагмент, встроенный в Xamarin во фрагменте

У меня куча странных проблем с фрагментами, которые содержат фрагменты, встроенные во время разработки в файл axml.

Мой вопрос заключается в том, что когда я закончил работу с фрагментом, который я загрузил в представление с помощью FragmentManager, а затем удалил также с помощью FragmentManager, автоматически уничтожаются неявно загруженные фрагменты? Если нет, как мне очистить родительский фрагмент, чтобы встроенные фрагменты также были уничтожены. Также, когда родительский фрагмент уничтожен, мне нужно вызвать View.RemoveAllViews(), чтобы удалить макет фрагментов?


person Terry151151    schedule 03.09.2016    source источник


Ответы (2)


Кажется, это работает. Захватывайте фрагменты по мере их загрузки в список, а затем удаляйте их, когда основной фрагмент выгружается позже. (Необходимо утилизировать())

public partial class MainActivity : Activity
{
    private LinearLayout LoaderLayout;

    private readonly List<Fragment> ActiveFragments = new List<Fragment>();

    public override void OnAttachFragment( Fragment fragment ) { ActiveFragments.Add( fragment ); }

    private async void ClearLoadFrame()
    {
        if( LoaderLayout == null )
            LoaderLayout = FindViewById<LinearLayout>( Resource.Id.loaderLayout );

        var Transaction = FragmentManager.BeginTransaction();

        foreach( var Frag in ActiveFragments )
        {
            Transaction.Remove( Frag );
            Frag.Dispose();
        }

        Transaction.CommitAllowingStateLoss();
        ActiveFragments.Clear();

        var Completed = false;

        RunOnUiThread( () =>
        {
            LoaderLayout.RemoveAllViews();
            Completed = true;
        } );

        await Task.Run( () =>
        {
            while( !Completed )
                Thread.Sleep(50);
        });
    }
person Terry151151    schedule 04.09.2016
comment
Полностью не исправлено. Теперь у меня обратная задача. Когда я создаю фрагмент, затем уничтожаю его, а затем пытаюсь воссоздать, теперь я получаю встроенный фрагмент и исключение, говорящее, что он не может получить доступ к удаленному объекту. - person Terry151151; 05.09.2016

Я обнаружил, что то, что я пытаюсь сделать, не разрешено.

Из этой статьи

Обратите внимание, что одно ограничение заключается в том, что вложенные (или дочерние) фрагменты должны динамически добавляться во время выполнения к их родительскому фрагменту и не могут добавляться статически с помощью тега.

person Terry151151    schedule 07.09.2016