MvxTabsFragmentActivity — Удалить вкладки

Есть ли способ удалить вкладки из класса, унаследованного от MvxTabsFragmentActivity? Я имею в виду, что в настоящее время существует только AddTab<T>() метод для добавления вкладок. Но что, если я хочу удалить вкладки?

ТИА,

Пап


person Pap    schedule 07.01.2014    source источник


Ответы (2)


Нет — в настоящее время MvxTabsFragmentActivity не предоставляет никаких функций RemoveTab.

Источником этого действия является https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Droid.Fragging/MvxTabsFragmentActivity.cs — вы сможете использовать его в качестве отправной точки для своих нужд. .

person Stuart    schedule 07.01.2014
comment
Спасибо @Стюарт. Я хотел, чтобы иметь возможность удалить все вкладки. Я не мог наследовать от MvxTabsFragmentActivity или добавить свой метод в качестве метода расширения, потому что все основные необходимые члены являются закрытыми. Поэтому я просто скопировал MvxTabsFragmentActivity.cs в свой проект и добавил свой собственный метод. - person Pap; 08.01.2014

ОБНОВЛЕНИЕ: После того, как я последовал совету @Stuart и, как я упомянул в своем комментарии ниже, я добавил исходный код для класса MvxTabsFragmentActivity в свой проект и добавил следующий метод — удалить все вкладки — что было всем Я хотел:

public void RemoveAllTabs()
        {
            // First, detach the curent tab using SupportFragmentManager object.
            if (_currentTab != null)
            {
                var tag = _currentTab.CachedFragment.Tag;

                _currentTab.CachedFragment = SupportFragmentManager.FindFragmentByTag( tag );

                if (_currentTab.CachedFragment != null && !_currentTab.CachedFragment.IsDetached)
                {
                    var ft = SupportFragmentManager.BeginTransaction();
                    ft.Detach( _currentTab.CachedFragment );
                    ft.Commit();
                    SupportFragmentManager.ExecutePendingTransactions();
                }
            }

            // Second remove all tabs from TabHost object
            if (_tabHost != null)
                _tabHost.ClearAllTabs();

            // And lastly, empty our _lookup table(actually a Dictionary).
            _lookup.Clear();

            _currentTab = null; // Clear the current tab
        }

Я думаю, если кто-то захочет удалить конкретную вкладку, он может использовать объект SupportFragmentManager и получить что-то вроде этого:

public void RemoveTab( string tag )
{
    var fragment = SupportFragmentManager.FindFragmentByTag( tag );

    if (fragment != null && ! fragment.IsDetached)
    {
        var ft = SupportFragmentManager.BeginTransaction();
        ft.Detach( fragment );
        ft.Commit();
        SupportFragmentManager.ExecutePendingTransactions();

        //_tabHost.TabWidget.RemoveView( fragment.View ); // Neither this..
        //_tabHost.RemoveView( fragment.View );           // .. or this removed the tab from the Tabhost.

    }
}

Однако, хотя приведенный выше код успешно удалил фрагмент/представление внутри вкладки, сама вкладка осталась пустой/пустой. Я не смог найти методы TabHost.RemoveTab() или TabHost.TabWidget.RemoveTab() и TabHost.RemoveView() /TabHost.TabWidget.RemoveView() не сработало.

Примечания. Я переименовал MvxTabsFragmentActivity во что-то другое и включил все уведомления об авторских правах вверху класса в своем проекте. Еще раз спасибо @Stuart.

person Pap    schedule 08.01.2014