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

RecyclerView跳转后获取位置为0而非对应项位置的问题

为啥RecyclerView跳转后拿到的position始终是0?

兄弟,我太懂这种踩坑的憋屈感了——点不同条目跳过去,结果Toast永远显示Position:0,简直让人怀疑人生!咱们一步步揪出问题根源:

最常见的坑:传参时没拿到正确的position

这绝对是90%的情况!你得先去RecyclerView的Adapter里检查跳转逻辑,是不是传参的时候写错了position:

  • 错误示范(写死0或者用错变量):
    holder.itemView.setOnClickListener {
        val args = NextFragmentArgs.Builder()
            .setPosition(0) // 这里直接写死0,肯定每次都拿到0!
            .build()
        findNavController().navigate(R.id.action_to_next, args.toBundle())
    }
    
  • 正确姿势:用holder.adapterPosition或者onBindViewHolder的position参数:
    holder.itemView.setOnClickListener {
        val args = NextFragmentArgs.Builder()
            .setPosition(holder.adapterPosition) // 这里要对应当前条目的真实位置
            .build()
        findNavController().navigate(R.id.action_to_next, args.toBundle())
    }
    

导航组件的参数配置问题

去你的navigation.xml里看看对应Action的参数设置:

  • 有没有给position设置了默认值0?如果有,而你传参时没覆盖这个值,就会一直用默认的0。
  • 确认<argument>标签的argType是integer,类型不匹配也可能导致参数获取异常:
    <action
        android:id="@+id/action_current_to_next"
        app:destination="@id/nextFragment">
        <argument
            android:name="position"
            app:argType="integer"
            app:nullable="false"/> <!-- 别加默认值,或者确保传参时覆盖 -->
    </action>
    

Fragment实例复用/参数重置问题

  • 如果你是手动new NextFragment而不是用导航组件跳转,有没有每次都传入新的Bundle?要是复用了旧的Fragment实例,参数肯定不会更新。
  • 检查NextFragment里有没有在onCreate之前就调用了获取position的代码,这时候getArguments()可能还没初始化,拿到的就是默认值0。

最后验证一下Bundle内容

可以在NextFragment里先打印一下Arguments的内容,确认参数是不是真的传过来了:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    Log.d("NextFragment", "传入的参数:${arguments?.getInt("position")}")
    // 再用Args解析
    val position = NextFragmentArgs.fromBundle(requireArguments()).getPosition()
    Toast.makeText(context, "Position: $position", Toast.LENGTH_SHORT).show()
}

先从「传参是否正确」开始排查,这是最容易翻车的地方!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:47:35