В настоящее время мне реализовывали TabHost с 3 вкладками каждый содержащий отдельное действие. Мой вопрос состоит в том, как я переключаюсь между вкладками из одной из операций, которая расположена в хосте вкладки. Я посмотрел везде и был неудачен в нахождении реального решения этой проблемы.
После долгой борьбы с этой проблемой я смог найти решение для переключения вкладки при использовании вкладок на основе действий.
В родительском классе активности, где создается tabhost, я реализовал метод, подобный приведенному ниже:
public void switchTab(int tab){
tabHost.setCurrentTab(tab);
}
Внутри вкладки, которую я хотел бы иметь возможность внутренне переключаться на другую вкладку, я создал метод ниже:
public void switchTabInActivity(int indexTabToSwitchTo){
MintTrack parentActivity;
parentActivity = (MintTrack) this.getParent();
parentActivity.switchTab(indexTabToSwitchTo);
}
] Если вам нужен хороший пример этого кода, вы можете взглянуть на мой проект MintTrack здесь и здесь .
В качестве примечания: будьте очень осторожны при принятии решения о том, использовать ли TabHost на основе представлений или действий.
Вкладки на основе Activity
хороши тем, что их можно разделить в собственный XML-файл. Действия также могут быть организованы в собственный файл Java, а не загромождены в один. При этом некоторые вещи, которые вы могли бы подумать, легко усложнить с помощью вкладок, основанных на действиях. Трудно передавать информацию между вкладками, не создавая накладных расходов. Вкладки на основе действий
также используют больше памяти / процессорного времени, поскольку они имеют накладные расходы на Activity
вокруг каждой из них. Пожалуйста, примите во внимание этот и многие другие компромиссы, прежде чем углубляться в использование Activity
на основе TabHost
. Теперь я знаю, что лично выбрал бы TabHost
, основанный на представлении, если бы когда-нибудь использовал их снова.
Шаг № 1: Замените действия с удержанием вкладок на представления с удержанием вкладок, используя лучшую форму setContent ()
на TabSpec
Шаг № 2 : Вызовите setCurrentTab ()
на вашем TabHost
из вашего единственного Activity
. Мне еще предстоит увидеть какую-либо пользу от использования Activity
в качестве содержимое вкладки, а не простое представление
. Наличие действия Activity
в качестве содержимого вкладки тратит время процессора и память (и, следовательно, время автономной работы) и значительно усложняет выполнение таких действий, как будто вы пытаетесь сделать это.
Я столкнулся с той же проблемой. Хотя было бы лучше использовать одно действие для всех вкладок, иногда рациональным выбором является простой выход.
Чтобы избежать создания нового действия вкладки, когда вкладка хочет перейти на другую вкладку, я помещаю это в свой AndroidManifest.xml:
<activity android:name=".MyTabsActivity"
android:label="Tabs!"
android:launchMode="singleTask">
Отправить намерение с нужной вкладкой:
class OneTabContentActivity {
void switchTab() {
final Intent intent = new Intent(mContext, MyTabsActivity.class);
intent.setAction("Switch to tab 1, please");
mContext.startActivity(intent);
}
class MyTabsActivity {
@Override
protected void onNewIntent (Intent intent) {
super.onNewIntent(intent);
getTabHost().setCurrentTab(1);
}
}
У этого решения есть недостатки, но я Непонятно в деталях. Кто-то другой может знать достаточно, чтобы указать на них.