Intereting Posts
Не удается разрешить метод show (android.support.v4.app.FragmentManager, java.lang.String) Как использовать Seekbar в android как seekBar, а также progressBar одновременно? Android – Центрировать название панели инструментов Как я могу назвать определенный PreferenceFragment из PreferenceActivity? Ошибка: выполнение выполнено для задачи «: app: processDebugGoogleServices». > Исправьте конфликт версий ApprtcDemo с локальным сервером работает между браузерами, но не поддерживает Android для браузера Где я должен сообщать о ошибках в документации на Android? Утверждение IF просто не работает R.raw.any ничего нельзя разрешить Android Retrofit – onProgressUpdate для показа уведомления о ходе работы Смайлики в EditText Как получить изображение, только что записанное с камеры Невозможно найти символьную переменную GoogleAuthUtil после обновления до сервисов Google Play 9.0.0 Что такое стандартное разрешение планшета Android? Как определить, когда на экране появляется фрагмент?

Android – переключение вкладок изнутри действия на вкладке

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

Solutions Collecting From Web of "Android – переключение вкладок изнутри действия на вкладке"

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

В классе родительской активности, где создается 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 основанные на Activity , великолепны, потому что их можно разделить на собственный XML-файл. Мероприятия также могут быть организованы в собственный файл Java вместо того, чтобы быть загроможденным в один. При этом некоторые из вещей, которые, по вашему мнению, будут легко усложняться с вкладками, основанными на активности. Его трудно передать информацию между вкладками, не создавая накладных расходов. Activity вкладках, основанных на Activity также используется больше времени памяти / ЦП, так как у них есть накладные расходы на Activity по каждому из них. Пожалуйста, подумайте об этом и о многих других компромиссах перед погружением в использование TabHost основе TabHost . Теперь я знаю, что лично я пойду с TabHost если я когда-нибудь их TabHost .

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

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

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

Во-первых, я задал метод для моего основного класса, который расширяет TabActivity, назовем его «MainActivity»

 public TabHost getMyTabHost() { return tabHost; } 

Затем я добавляю класс активности вкладки;

 MainActivity ta = (MainActivity) this.getParent(); TabHost th = ta.getMyTabHost(); th.setCurrentTab(0); 

Это сработало для меня.

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

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

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

У меня была немного другая проблема, и я подумал, что добавлю это для всех, кто сталкивается с подобной ситуацией. У меня есть приложение с вкладками, основанное на активности, и один из видов вкладок запускает другое действие, которое не контролируется tabHost. Мне нужно было нажать кнопку на этом завершении деятельности () (т. Е. Вернуться к основному виду вкладки) и одновременно переключиться на другую вкладку.

Я решил обработать его с помощью BroadcastReceiver. В классе, который настраивает TabHost, я добавил этот класс:

 class ChangeTabReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "ChangeTabReceiver: received"); TabHost tabHost = getTabHost(); tabHost.setCurrentTab(1); } } 

.. затем определили вары:

 ChangeTabReceiver changeTabReceiver; IntentFilter changeTabFilter; 

.. затем добавлено в onCreate ():

 changeTabReceiver = new ChangeTabReceiver(); changeTabFilter = new IntentFilter(myApplication.CHANGE_TAB); registerReceiver(changeTabReceiver, changeTabFilter); 

Наконец, в новом действии, когда вы хотите закрыть эту активность и переключить вкладки, сделайте следующее:

 Intent intent = new Intent(myApplication.CHANGE_TAB); this.sendBroadcast(intent); this.finish(); 

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

 public void switchTab(int index){ MintTrack ParentActivity; ParentActivity = (MintTrack) this.getParent(); ParentActivity.getTabHost().setCurrentTab(index); } 

Я просто ставил public static TabHost tabHost; В моей TabActivity .

Затем с любой другой вкладки я могу сделать MyTabActivity.tabHost.setCurrentTab(tabNumber);

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