Заставить Tabhost инициировать активность (обновить)

Проще говоря. Из контекстного меню в TabActivity, как я могу инициировать выполнение намерения для текущей вкладки? Я пытаюсь принудительно обновить.

Все вкладки инициируют действия, отображающие подмножество имен людей. Находясь в одном списке, вы вызываете действие редактирования, которое позволяет вам связать имя с одним из других списков в TabHost. Используйте кнопку «Назад», чтобы вернуться на вкладку (onResume срабатывает), и список не обновляется. Я хотел бы иметь элемент контекстного меню для обновления текущей вкладки.

Я знаю об использовании одного действия для всех представлений на вкладке, но по многим причинам я не выбрал этот метод.


person Jim    schedule 26.10.2010    source источник


Ответы (2)


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

    Intent i = new Intent().setClass(this, YourClass.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    TabHost.TabSpec spec = tabHost.newTabSpec("name")
.setIndicator("Class",res.getDrawable(R.drawable.ic_tab_something))
.setContent(intent);

    Tabhost tabHost.addTab(spec);
person trgraglia    schedule 05.01.2011
comment
добавление флага действительно сработало для меня. Не знаю, почему они проголосовали за ваш ответ. Спасибо! - person user522559; 26.07.2011
comment
Хорошо, это работает. Флаг перезагружает вкладку каждый раз, когда вы ее посещаете, поэтому все, что вам нужно сделать, это переключить вкладки с помощью команды setCurrentTab, а затем вернуться обратно. - person trgraglia; 27.07.2011
comment
@ user522559, возможно, потому что это не решает проблему обновления активной/видимой вкладки. Пользователю необходимо переключать вкладки. В целом флаг кажется бесполезным, поскольку в таком сценарии можно просто использовать обратный вызов onResume(). - person 3c71; 11.07.2012

Я думаю, что из-за жизненного цикла активности у вас возникнут проблемы с «перезапуском» активности (Жизненный цикл активности - startActivity()) — если вы переместите любую логику, которая у вас есть внутри метода onCreate, в другой метод, вызовите метод из onCreate и onResume, чтобы он перестроил для вас содержимое вкладки.

В качестве альтернативы вы можете добавить пункт меню для вызова этого метода, чтобы onCreate вызывал логический метод при первом запуске, и ваш пользователь мог вызывать его из меню для обновления содержимого.

person Scoobler    schedule 02.11.2010
comment
Я отложил эту проблему, но теперь я возвращаюсь к ней. Я не знаю, как сообщить действию об обновлении, поскольку меню параметров прикреплено к TabHost, а не к действию, отображаемому tabhost. Это действительно большая проблема для меня сейчас. - person Jim; 07.11.2010
comment
РЕШЕНО Мне пришлось выполнить две команды setCurrentTab(), одну на другую вкладку, а затем снова вернуться на вкладку, которая была в поле зрения. Это произошло очень быстро, поэтому я думаю, что смогу жить с этим уродливым взломом. - person Jim; 07.11.2010
comment
Джим, я тоже выполняю два setCurrentTab(), чтобы сначала предварительно загрузить содержимое на моей второй вкладке. Если я этого не сделаю, то я получаю исключение NullPointerException, когда пытаюсь вызвать общедоступный метод второй вкладки (из первой вкладки, еще не открыв вторую вкладку). Работает без проблем, мне просто интересно, есть ли более элегантный способ... - person littleK; 13.02.2012
comment
Я предполагаю, что другой альтернативой, которая немного менее хакерская, является вызов setCurrentTab() только один раз и использование getLocalActivityManager().startActivity(secondID, new Intent(this, SecondTabActivity.class)); - person littleK; 13.02.2012