Ответ 1
Вот пример кода, который вы можете добавить в свой onClick(). Это описал Марк и Кевин.
TabActivity tabs = (TabActivity) getParent();
tabs.getTabHost().setCurrentTab(2);
Я много раз использовал этот код. Надеюсь, это разъяснит.
Я боролся с этим в течение нескольких дней. Я пытаюсь программным образом переключать вкладки нажатием кнопки. Моя программа работает безупречно, если я просто использую вкладки для изменения действий, но подключение метода onClick с помощью setCurrentTab приводит к ошибке. Это метод, который не будет работать. Это довольно простая и простая функция, но я не видел много документации или примеров людей, пытающихся подключить кнопочный переключатель с вкладками переключения. Спасибо.
ImageButton next = (ImageButton) findViewById(R.id.ButtonAsk);
next.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
tabHost.setCurrentTab(2);
}
});
См. журнал изменений для журнала ошибок.
Вот пример кода, который вы можете добавить в свой onClick(). Это описал Марк и Кевин.
TabActivity tabs = (TabActivity) getParent();
tabs.getTabHost().setCurrentTab(2);
Я много раз использовал этот код. Надеюсь, это разъяснит.
В текущем действии нет виджета с @android:id/tabhost
. Следовательно, findViewById()
возвращает значение null, и ваш вызов setCurrentTab()
завершается с ошибкой.
Теперь, я думаю, это потому, что вы размещаете действия на своих вкладках. Если бы вы разместили Views
на своих вкладках, ваш код будет работать. Ваш код также будет быстрее, займет меньше места для кучи и будет иметь меньший риск исчерпания пространства в стеке.
Если вы хотите придерживаться своей текущей реализации, попробуйте позвонить getParent().findViewById()
вместо findViewById()
.
2017 ответ
Другие ответы здесь выглядят устаревшими. Документация Создание представлений Swipe Views with Tabs рекомендует использовать TabLayout
с ViewPager
.
Вот одна частичная реализация кода для этого.
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private Button mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
mViewPager = (ViewPager) findViewById(R.id.fieldspager);
// ...
mButton.setOnClickListener(myButtonClickHandler);
}
View.OnClickListener myButtonClickHandler = new View.OnClickListener() {
@Override
public void onClick(View view) {
mViewPager.setCurrentItem(2, true);
}
};
}
Из приведенного выше кода установка закладки программно выполняется следующим образом:
mViewPager.setCurrentItem(2, true); // set it to the third tab
Вот еще одна реализация с более подробной информацией о настройке представления пейджера и макета вкладки.
Это работает для меня
getActionBar().setSelectedNavigationItem(0);
Update: включение моего кода в код вопроса, чтобы дать ему больше контекста...
ImageButton next = (ImageButton) findViewById(R.id.ButtonAsk);
next.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
getActionBar().setSelectedNavigationItem(2);
}
});