我几天来一直在努力解决这个问题。 我试图按下按钮以编程方式切换标签。 如果我只使用选项卡来更改活动,我的程序将完美运行,但使用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); } });
请参阅错误日志的编辑历史记录。
这是一个可以放在onClick()中的代码示例。 正如马克和凯文所描述的那样。
TabActivity tabs = (TabActivity) getParent(); tabs.getTabHost().setCurrentTab(2);
我已经多次使用这段代码。 希望这澄清一下。
当前活动中没有@android:id/tabhost
小部件。 因此, findViewById()
返回null,并且您对setCurrentTab()
调用失败。
现在,我的猜测是因为你将活动放在标签中。 如果您将Views
放在选项卡中,您的代码将起作用。 您的代码也会更快,占用更少的堆空间,并且可以降低堆栈空间不足的风险。
如果您希望坚持使用当前的实现,请尝试调用getParent().findViewById()
而不是findViewById()
。
2017答案
这里的其他答案似乎已经过时了。 使用选项卡创建滑动视图文档建议将TabLayout
与TabLayout
一起使用。
这是执行此操作的代码的一个部分实现。
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); } });