有没有办法从MvxTabsFragmentActivity继承的类中删除标签?我的意思是,目前只有AddTab<T>()
方法可以添加标签。 但是,如果我想删除标签怎么办?
TIA,
巴氏
答案 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。