如何使用Android中的buttonclick以编程方式切换选项卡

我几天来一直在努力解决这个问题。 我试图按下按钮以编程方式切换标签。 如果我只使用选项卡来更改活动,我的程序将完美运行,但使用setCurrentTab连接onClick方法会导致错误。 这是不起作用的方法。 这是一个非常基本和简单的function,但我没有看到很多文档或人们试图用切换标签连接按钮的例子。 谢谢。

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); } }); 

请参阅错误日志的编辑历史记录。

  • 将片段分配给ActionBar中具有不同方向的选项卡
  • Android片段oncreateview调用了标签更改
  • 如何更改android中标签指示文字的颜色?
  • 如何在三星Galaxy Tab上使用相机闪光灯/ LED作为手电筒?
  • 如何使用页面滑动视图创建Android选项卡式样式
  • 在SlidingTabLayout中自定义选定的选项卡文本颜色
  • 我可以在Google Play控制台中为应用添加标签吗?
  • 在Android中自定义状态标签
  • 这是一个可以放在onClick()中的代码示例。 正如马克和凯文所描述的那样。

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

    我已经多次使用这段代码。 希望这澄清一下。

    当前活动中没有@android:id/tabhost小部件。 因此, findViewById()返回null,并且您对setCurrentTab()调用失败。

    现在,我的猜测是因为你将活动放在标签中。 如果您将Views放在选项卡中,您的代码将起作用。 您的代码也会更快,占用更少的堆空间,并且可以降低堆栈空间不足的风险。

    如果您希望坚持使用当前的实现,请尝试调用getParent().findViewById()而不是findViewById()

    2017答案

    这里的其他答案似乎已经过时了。 使用选项卡创建滑动视图文档建议将TabLayoutTabLayout一起使用。

    这是执行此操作的代码的一个部分实现。

     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); 

    更新:将我的代码插入到问题的代码中,为其提供更多上下文…

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