Android - Переключите Вкладки из Действия во вкладке

В настоящее время мне реализовывали TabHost с 3 вкладками каждый содержащий отдельное действие. Мой вопрос состоит в том, как я переключаюсь между вкладками из одной из операций, которая расположена в хосте вкладки. Я посмотрел везде и был неудачен в нахождении реального решения этой проблемы.

43
задан crv 12 April 2010 в 04:52
поделиться

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 , основанный на представлении, если бы когда-нибудь использовал их снова.

94
ответ дан 26 November 2019 в 22:32
поделиться

Шаг № 1: Замените действия с удержанием вкладок на представления с удержанием вкладок, используя лучшую форму setContent () на TabSpec

Шаг № 2 : Вызовите setCurrentTab () на вашем TabHost из вашего единственного Activity

. Мне еще предстоит увидеть какую-либо пользу от использования Activity в качестве содержимое вкладки, а не простое представление . Наличие действия Activity в качестве содержимого вкладки тратит время процессора и память (и, следовательно, время автономной работы) и значительно усложняет выполнение таких действий, как будто вы пытаетесь сделать это.

5
ответ дан 26 November 2019 в 22:32
поделиться

Я столкнулся с той же проблемой. Хотя было бы лучше использовать одно действие для всех вкладок, иногда рациональным выбором является простой выход.

Чтобы избежать создания нового действия вкладки, когда вкладка хочет перейти на другую вкладку, я помещаю это в свой 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);
  }
}

У этого решения есть недостатки, но я Непонятно в деталях. Кто-то другой может знать достаточно, чтобы указать на них.

10
ответ дан 26 November 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: