MvxTabsFragmentActivity - Remove tabs

久未见 提交于 2020-01-03 06:20:08

问题


Is there any way to remove tabs from an MvxTabsFragmentActivity-inherited class? I mean, currently there's only AddTab<T>() method for adding tabs. But, what if I want to remove tabs?

TIA,

Pap


回答1:


No - MvxTabsFragmentActivity doesn't provide any RemoveTab functionality currently.

The source for this activity is https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Droid.Fragging/MvxTabsFragmentActivity.cs - you should be able to use this as a starting point for your own needs.




回答2:


UPDATE: After following @Stuart's advice and-as I mentioned in my comment below-I added the source code for the MvxTabsFragmentActivity class to my project and added the following method-to remove all tabs-which was all I wanted:

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
        }

I guess if someone wanted to have a specific tab removed he could use the SupportFragmentManager object and have something like this:

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.

    }
}

However, although the above code was successful at removing the fragment/view inside the tab, the tab itself remained-showing a blank/empty tab. I couldn't find a TabHost.RemoveTab() or TabHost.TabWidget.RemoveTab() methods and the TabHost.RemoveView()/TabHost.TabWidget.RemoveView() did not work.

Notes: I renamed the MvxTabsFragmentActivity to something else and included all copyright notices at the top of the class in my project. Thanks again to @Stuart.



来源:https://stackoverflow.com/questions/20973203/mvxtabsfragmentactivity-remove-tabs

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!