Android开发:onClick方法中Intent无法跳转至目标Activity问题排查及FragmentPagerAdapter过时疑问
问题解决:Intent跳转失败 & FragmentPagerAdapter过时问题
Hey there! Let's break down and fix your two issues step by step:
1. Intent无法跳转到目标Activity的问题
问题根源
看你MainActivity中onItemClicked方法的代码:
Intent(this@MainActivity, DetailUserActivity::class.java).also{ intent.putExtra(DetailUserActivity.EXTRA_USERNAME, data.login) startActivity(intent) }
你创建了一个新的Intent并赋值给it,但后续调用的intent是MainActivity自身的Intent(即启动当前MainActivity的那个Intent),而不是你刚创建的用于跳转的Intent!所以你实际上没有正确配置跳转的Intent,自然无法启动DetailUserActivity。
修复代码
把intent换成it即可,或者用更清晰的写法:
// 写法一:修正also块内的变量引用 Intent(this@MainActivity, DetailUserActivity::class.java).also{ intent -> intent.putExtra(DetailUserActivity.EXTRA_USERNAME, data.login) startActivity(intent) } // 写法二:拆分步骤更直观 val intent = Intent(this@MainActivity, DetailUserActivity::class.java) intent.putExtra(DetailUserActivity.EXTRA_USERNAME, data.login) startActivity(intent)
额外检查点
如果修复后还是无法跳转,请确认:
DetailUserActivity已经在AndroidManifest.xml中注册(比如添加<activity android:name=".DetailUserActivity"/>)- 查看Logcat是否有崩溃日志,排除DetailUserActivity初始化时的异常
2. FragmentPagerAdapter被标记为过时的问题
原因说明
Android官方已经弃用了FragmentPagerAdapter,它存在性能和灵活性的局限,现在推荐使用**ViewPager2搭配FragmentStateAdapter**实现页面切换功能。ViewPager2是ViewPager的升级版,支持垂直滚动、更好的RecyclerView集成等特性。
修复步骤
第一步:替换布局中的ViewPager为ViewPager2
把布局里的<ViewPager>标签换成:
<androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent"/>
第二步:修改SectionPagerAdapter继承自FragmentStateAdapter
import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.viewpager2.adapter.FragmentStateAdapter class SectionPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { @StringRes private val TAB_TITLES = intArrayOf(R.string.tab_1, R.string.tab_2) override fun getItemCount(): Int = 2 override fun createFragment(position: Int): Fragment { return when(position){ 0 -> FollowerFragment() 1 -> FollowingFragment() else -> FollowerFragment() } } // 获取页面标题,用于和TabLayout关联 fun getPageTitle(position: Int, context: Context): CharSequence? { return context.resources.getString(TAB_TITLES[position]) } }
第三步:在Activity中关联ViewPager2和TabLayout
如果使用了TabLayout,需要用TabLayoutMediator来完成关联:
// 初始化ViewPager2和适配器 val viewPager = binding.viewPager val adapter = SectionPagerAdapter(this) viewPager.adapter = adapter // 关联TabLayout与ViewPager2 TabLayoutMediator(binding.tabLayout, viewPager) { tab, position -> tab.text = adapter.getPageTitle(position, this) }.attach()
内容的提问来源于stack exchange,提问作者Karrax
相关产品推荐
相关产品推荐

