Подтвердить что ты не робот

Как программно переключаться с помощью кнопок buttonclick в Android

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

См. журнал изменений для журнала ошибок.

4b9b3361

Ответ 1

Вот пример кода, который вы можете добавить в свой onClick(). Это описал Марк и Кевин.

    TabActivity tabs = (TabActivity) getParent();
    tabs.getTabHost().setCurrentTab(2);

Я много раз использовал этот код. Надеюсь, это разъяснит.

Ответ 2

В текущем действии нет виджета с @android:id/tabhost. Следовательно, findViewById() возвращает значение null, и ваш вызов setCurrentTab() завершается с ошибкой.

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

Если вы хотите придерживаться своей текущей реализации, попробуйте позвонить getParent().findViewById() вместо findViewById().

Ответ 3

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

Вот еще одна реализация с более подробной информацией о настройке представления пейджера и макета вкладки.

Ответ 4

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

getActionBar().setSelectedNavigationItem(0);

Update: включение моего кода в код вопроса, чтобы дать ему больше контекста...

ImageButton next = (ImageButton) findViewById(R.id.ButtonAsk);
next.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View view)
    {
        getActionBar().setSelectedNavigationItem(2);
    }
});