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