2010-03-12 1 views
5

У меня есть TabActivity. Каждая вкладка указывает на вспомогательную активность. Это отлично работает.Перезапуск активности на одной вкладке в TabActivity?

Есть ли какой-либо умный способ обновить одну из вкладок активности? Я просто хочу «перезапустить» активность в табл. 3, например. Не уверена в хорошем способе сделать это, кроме как создать поддержку обновления для самой активности или очистить ВСЕ вкладки и воссоздать их все.

Спасибо,

ответ

4

Я не пробовал это сам, но, как правило, вы получаете доступ каждая вкладка индивида Activity с помощью LocalActivityManager. Это можно получить в TabActivity с помощью getLocalActivityManager().

Похоже, что вы должны использовать destroyActivity() и startActivity(), чтобы перезапустить мероприятие, хотя я не совсем уверен, что это сработает (как я сам не сделал). Важно отметить, что id Activity будет эквивалентен тегу, который вы установили для вкладки (например, String, которую вы предоставили).

LocalActivityManager manager = getLocalActivityManager(); 
manager.destroyActivity("tab3", true); 
manager.startActivity("tab3", new Intent(this, ThirdTab.class)); 
+0

Удивительная благодарность Даниил, я попробую! – user246114

+0

Это генерирует 'NullPointerException' для меня на' android.widget.TabHost.setCurrentTab() 'строка 328. –

1

Вот решение:

tabHost.setOnTabChangedListener(this); 
public void onTabChanged(String tabId) { 
     Log.d(LOG_KEY, tabId); 
     LocalActivityManager manager = getLocalActivityManager(); 
     manager.destroyActivity("ID_1", true); 
     manager.startActivity("ID_1", new Intent(this, YourMyActivity.class)); 
    } 
6

Чуть более динамичное решение:

LocalActivityManager manager = getLocalActivityManager(); 
String currentTag = tabHost.getCurrentTabTag(); 
Class<? extends Activity> currentClass = manager.getCurrentActivity().getClass(); 
manager.destroyActivity(currentTag, true); 
manager.startActivity(currentTag, new Intent(this, currentClass)); 
+0

LocalActivityManager устарел. – Euthyphro

+0

Спасибо Euthyphro. Это было написано полтора года назад. Кто-то уже дал лучший ответ? Если да, то какой? – juicedM3

4

Вы можете перезапустить активность, установив флажок. Код выглядит следующим образом.

spec = tabHost .newTabSpec("tab1") 
       .setIndicator("FirstActivity") 
       .setContent(new Intent(this,MyFirstActivity.class) 
       .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
tabHost.addTab(spec);