有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我已经为此挣扎了几天了。我试图在点击按钮时以编程方式切换选项卡。如果我只是使用选项卡来更改活动,那么我的程序可以完美地运行,但是将onClick方法与setCurrentTab连接会导致错误。这种方法行不通。这是一个非常基本和简单的功能,但我还没有看到太多的文档或示例,说明人们试图用切换选项卡来连接按钮。谢谢

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

                TabHost tabHost =  (TabHost) findViewById(安卓.R.id.tabhost);
              tabHost.setCurrentTab(2);                
             }
         });

有关错误日志,请参阅编辑历史记录


共 (4) 个答案

  1. # 1 楼答案

    2017年答案

    这里的其他答案似乎已经过时。Creating Swipe Views with Tabs文档建议将^{}^{}一起使用

    下面是代码的一个部分实现

    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
    

    Here is another implementation了解查看页面和选项卡布局设置的更多详细信息

  2. # 2 楼答案

    这对我有用

    getActionBar().setSelectedNavigationItem(0);
    

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

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

    下面是一个代码示例,可以放在onClick()中。正如马克和凯文所描述的

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

    这个代码我已经用过很多次了。希望这能澄清

  4. # 4 楼答案

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

    现在,我猜这是因为你把活动放在了你的标签上。如果你把Views放在标签里,你的代码就可以工作了。您的代码也会更快,占用更少的堆空间,并降低堆栈空间不足的风险

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