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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:02:31