MvxTabsFragmentActivity - Премахване на раздели

Има ли някакъв начин за премахване на раздели от клас, наследен от MvxTabsFragmentActivity? Искам да кажа, че в момента има само AddTab<T>() метод за добавяне на раздели. Но какво ще стане, ако искам да премахна раздели?

TIA,

Pap


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
Благодаря @Stuart. Това, което исках, беше да мога да премахна всички раздели. Не можах да наследя от 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