Есть ли способ удалить вкладки из класса, унаследованного от MvxTabsFragmentActivity? Я имею в виду, что в настоящее время существует только AddTab<T>()
метод для добавления вкладок. Но что, если я хочу удалить вкладки?
ТИА,
Пап
Есть ли способ удалить вкладки из класса, унаследованного от MvxTabsFragmentActivity? Я имею в виду, что в настоящее время существует только AddTab<T>()
метод для добавления вкладок. Но что, если я хочу удалить вкладки?
ТИА,
Пап
Нет — в настоящее время MvxTabsFragmentActivity не предоставляет никаких функций RemoveTab
.
Источником этого действия является https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Droid.Fragging/MvxTabsFragmentActivity.cs — вы сможете использовать его в качестве отправной точки для своих нужд. .
ОБНОВЛЕНИЕ: После того, как я последовал совету @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.