Возможно, вам придется реализовать onBackPressed в ActivityGroup для правильной обработки истории, но это зависит от проекта.
я есть приложение, которое может создавать вкладки динамически. И когда я создаю вкладку, я начинаю деятельность как намерение. Вот так:
private void addTab(Context packageContext, Class<?> newClass, TabHost mTabHost, String tabId, String tabLabel){
// newClass is my Activity class that I want to start in the tab
Intent intent = new Intent().setClass(packageContext, newClass);
TabHost.TabSpec spec;
spec = mTabHost.newTabSpec(tabId).setIndicator(tabLabel)
.setContent(intent);
mTabHost.addTab(spec);
mTabHost.setCurrentTabByTag(tabId);
}
Довольно стандартный. И это прекрасно работает. Теперь предположим, что у меня есть кнопка (или пункт меню, что угодно) в действии, которое я создал внутри своей вкладки. Когда пользователь нажимает эту кнопку, я хочу, чтобы действие и вкладка, в которой он находится, были удалены и уничтожены.
Я не могу найти простой способ сделать это. Я нашел функцию TabHost.clearAllTabs (), но она уничтожает все вкладки и действия, я просто хочу удалить одну.
Кто-то предложил мне сохранить список всех открытых вкладок, а затем вызвать clearAllTabs (), после чего я воссоздаю все остальные вкладки, кроме той, которая мне не нужна.
Что-то вроде этого:
public static ArrayList<TabHost.TabSpec> list = new ArrayList<TabHost.TabSpec>();
Я добавляю эту строку в мою функцию addTab (), чтобы каждая созданная мной вкладка запоминалась в моем ArrayList:
list.add(spec);
И затем, когда я хочу удалить свою вкладку, я запускаю эту функцию:
public static void removeTab(){
list.remove(list.size()-1); // remove it from memory
mTabHost.clearAllTabs(); // clear all tabs from the tabhost
for(TabHost.TabSpec spec : list) // add all that you remember back
mTabHost.addTab(spec);
}
Это удаляет мою вкладку из моего ArrayList, удаляет все вкладки, а затем воссоздает все оставшиеся вкладки, используя мой ArrayList. Теоретически это должно работать, но я получаю следующую ошибку при попытке вызвать эту функцию:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.TabWidget.setCurrentTab(TabWidget.java:342)
at android.widget.TabWidget.focusCurrentTab(TabWidget.java:366)
at android.widget.TabHost.setCurrentTab(TabHost.java:323)
at android.widget.TabHost.addTab(TabHost.java:216)
at com.example.myapp.TabManager.removeTab(QuikBrowser.java:86)
at com.example.myapp.TabManager.TabWindow.onOptionsItemSelected(TabWindow.java:91)
at android.app.Activity.onMenuItemSelected(Activity.java:2205)
По какой-то причине при добавлении вкладки она пытается установить текущую вкладку и попадает в исключение нулевого указателя.
Если бы вы, ребята, могли предложить другой способ достижения того, что я хочу сделать, или способ исправить мой текущий метод, я был бы признателен.