You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击Activity内按钮跳转至另一Activity的指定Tab/Fragment

实现方案

核心逻辑是跳转时携带目标Tab的位置参数,Tab页接收参数后自动选中对应位置即可,具体修改如下:

1. 修改ButtonList.java

给每个按钮设置点击事件,跳转时通过Intent携带目标Tab的下标(Tab下标从0开始,按钮1对应下标0、按钮2对应下标1,以此类推),修改后代码参考:

public class ButtonList extends AppCompatActivity {
    private Button btntotab1;
    private Button btntotab2;
    // 剩余btntotab3到btntotab7按同样规则声明

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_buttonlist);

        btntotab1 = findViewById(R.id.btntotab1);
        btntotab1.setOnClickListener(view -> openTargetTab(0));

        btntotab2 = findViewById(R.id.btntotab2);
        btntotab2.setOnClickListener(view -> openTargetTab(1));
        
        // 剩余按钮3~7按同样逻辑设置,依次传入2、3、4、5、6即可
    }

    // 统一跳转方法,传入目标Tab的下标参数
    public void openTargetTab(int targetTabIndex){
        Intent intent = new Intent(this, TabbedActivity.class);
        intent.putExtra("TARGET_TAB_INDEX", targetTabIndex);
        startActivity(intent);
    }
}

2. 修改TabbedActivity.java

首先修正原有代码的笔误:pager2ah是变量名书写错误,需要改为你声明的pager2aa,否则会编译报错。再新增接收参数、切换Tab的逻辑,修改后代码参考:

public class TabbedActivity extends AppCompatActivity {

    TabLayout tabLayoutaa;
    ViewPager2 pager2aa;
    FragmentAdapter adapteraa;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabbed);

        tabLayoutaa = findViewById(R.id.tab_layoutaa);
        pager2aa = findViewById(R.id.view_pager2aa);

        FragmentManager fm = getSupportFragmentManager();
        adapteraa = new FragmentAdapter(fm, getLifecycle());
        pager2aa.setAdapter(adapteraa);

        tabLayoutaa.setTabMode(tabLayoutaa.MODE_SCROLLABLE);
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 1"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 2"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 3"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 4"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 5"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 6"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 7"));

        tabLayoutaa.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                pager2aa.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        // 修正原有笔误:pager2ah改为pager2aa
        pager2aa.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                tabLayoutaa.selectTab(tabLayoutaa.getTabAt(position));
            }
        });

        // 新增:接收跳转参数,切换到对应Tab
        int targetIndex = getIntent().getIntExtra("TARGET_TAB_INDEX", 0);
        // 校验下标合法性,避免下标越界崩溃
        if (targetIndex >= 0 && targetIndex < adapteraa.getItemCount()) {
            // 第二个参数传false可禁止切换时的滚动动画,不需要可以不传
            pager2aa.setCurrentItem(targetIndex);
        }
    }
}

可选优化

  • 如果不需要Tab切换时的滚动过渡效果,可将pager2aa.setCurrentItem(targetIndex)改为pager2aa.setCurrentItem(targetIndex, false)
  • 可根据业务需求调整未获取到传递参数时的默认Tab下标,默认值可修改getIntExtra的第二个参数。

内容的提问来源于stack exchange,提问作者tasty299orange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:15:04