如何通过按钮点击跳转至ViewPager2并设置默认显示第二页?
实现方案
核心思路是通过Intent传递目标页面的索引参数,在ViewPager2所在的Activity中接收参数后,设置ViewPager2显示指定页面。
1. 在跳转的Activity中传递目标页面索引
在包含按钮的Activity里,给按钮添加点击事件,通过Intent携带目标页面的索引(注意ViewPager2的页面索引从0开始,第二个页面对应索引1):
Java 代码示例
button.setOnClickListener(v -> { Intent intent = new Intent(this, ViewPagerHostActivity.class); // 传递目标页面索引,第二个页面对应1 intent.putExtra("KEY_TARGET_PAGE", 1); startActivity(intent); });
Kotlin 代码示例
button.setOnClickListener { val intent = Intent(this, ViewPagerHostActivity::class.java) intent.putExtra("KEY_TARGET_PAGE", 1) startActivity(intent) }
2. 在ViewPager2所在的Activity中接收参数并设置页面
在ViewPager2所属的Activity的onCreate方法中,先完成ViewPager2的初始化(设置适配器等),然后接收Intent传递的参数,最后设置ViewPager2显示目标页面:
Java 代码示例
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager_host); // 初始化ViewPager2和适配器 ViewPager2 viewPager2 = findViewById(R.id.view_pager2); YourPagerAdapter adapter = new YourPagerAdapter(this); viewPager2.setAdapter(adapter); // 获取传递的目标页面索引,默认值为0(第一个页面) int targetPage = getIntent().getIntExtra("KEY_TARGET_PAGE", 0); // 使用post确保ViewPager2已完成初始化,再设置当前页面 viewPager2.post(() -> { // 第二个参数为false时直接跳转,true时平滑滚动 viewPager2.setCurrentItem(targetPage, false); }); }
Kotlin 代码示例
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_view_pager_host) val viewPager2 = findViewById<ViewPager2>(R.id.view_pager2) val adapter = YourPagerAdapter(this) viewPager2.adapter = adapter val targetPage = intent.getIntExtra("KEY_TARGET_PAGE", 0) viewPager2.post { viewPager2.setCurrentItem(targetPage, smoothScroll = false) } }
注意事项
- ViewPager2的页面索引从0开始,所以第二个页面对应的索引是1,不要搞错。
- 如果需要跳转时带有平滑滚动效果,把
setCurrentItem的第二个参数改为true即可。 - 用
post方法是为了确保ViewPager2已经完成视图初始化,避免出现设置无效的情况。
内容的提问来源于stack exchange,提问作者Rumen
相关产品推荐
相关产品推荐

