如何实现点击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
相关产品推荐
相关产品推荐

