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

use*_*797 21 java tabs android onclick android-tabhost

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

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);                
             }
         });
Run Code Online (Sandbox Code Playgroud)

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

Sco*_*ggs 26

这是一个可以放在onClick()中的代码示例.正如马克和凯文所描述的那样.

    TabActivity tabs = (TabActivity) getParent();
    tabs.getTabHost().setCurrentTab(2);
Run Code Online (Sandbox Code Playgroud)

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


Com*_*are 17

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

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

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


Sur*_*gch 8

2017年回答

这里的其他答案似乎已经过时了.在与标签创建刷卡查看文档推荐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);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码,以编程方式设置选项卡是这样完成的:

mViewPager.setCurrentItem(2, true); // set it to the third tab
Run Code Online (Sandbox Code Playgroud)

这是另一个实现,其中包含有关如何设置视图分页器和选项卡布局的更多详细信息.


Pau*_*aul 7

这适合我

getActionBar().setSelectedNavigationItem(0);
Run Code Online (Sandbox Code Playgroud)

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

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