MvxTabsFragmentActivity - 删除选项卡

时间:2014-01-07 13:43:55

标签: mvvmcross

有没有办法从MvxTabsFragmentActivity继承的类中删除标签?我的意思是,目前只有AddTab<T>()方法可以添加标签。 但是,如果我想删除标签怎么办?

TIA,

巴氏

2 个答案:

答案 0 :(得分:0)

否 - MvxTabsFragmentActivity目前不提供任何RemoveTab功能。

此活动的来源为https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Droid.Fragging/MvxTabsFragmentActivity.cs - 您应该可以将此作为自己需要的起点。

答案 1 :(得分:0)

<强>更新 按照@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.

    }
}

但是,虽然上面的代码成功删除了标签内的片段/视图,但标签本身仍然显示空白/空标签。我找不到{{1} }或TabHost.RemoveTab()方法,TabHost.TabWidget.RemoveTab() / TabHost.RemoveView()无效。

注意:我将MvxTabsFragmentActivity重命名为其他内容,并在项目的顶部包含了所有版权声明。再次感谢@Stuart。