Перезапустить действие в одной вкладке в TabActivity? - PullRequest
5 голосов
/ 12 марта 2010

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

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

Спасибо

Ответы [ 4 ]

6 голосов
/ 19 ноября 2011

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

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));
4 голосов
/ 06 февраля 2013

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

spec = tabHost  .newTabSpec("tab1")
                .setIndicator("FirstActivity")
                .setContent(new Intent(this,MyFirstActivity.class)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);
4 голосов
/ 12 марта 2010

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

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

LocalActivityManager manager = getLocalActivityManager();
manager.destroyActivity("tab3", true);
manager.startActivity("tab3", new Intent(this, ThirdTab.class));
1 голос
/ 10 марта 2011

Вот решение:

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));
    }
...