如何在Android中使用按钮点击编程方式切换选项卡

21

最近我一直在苦恼这个问题。我试图在按钮点击时以编程方式切换选项卡。如果我只使用选项卡来更改活动,则我的程序可以无缝运行,但是使用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);                
             }
         });

查看编辑历史以获取错误日志。

4个回答

26

以下是代码示例,可以放在您的onClick()函数中。这正如Mark和Kevin所描述的那样。

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

我已经多次使用过这段代码片段。希望这能澄清问题。


17

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

我猜测这是因为你将活动放在了选项卡中。如果你将 Views 放在选项卡中,你的代码就会正常工作。这样做还可以让你的代码更快、占用更少的堆空间,并减少运行时出现栈空间不足的风险。

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


8

2017年的答案

这里其他的回答似乎已经过时了。在创建带标签页的滑动视图文档中,建议使用TabLayoutViewPager一起使用。

以下是代码的一部分实现。

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

这里有另一种实现方式,详细介绍了如何设置视图页和选项卡布局。


7

这对我来说有效

getActionBar().setSelectedNavigationItem(0);

更新:将我的代码插入问题的代码中,以便更好地理解上下文...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接