如何使用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); } }); 

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

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

这是一个可以放在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); } });