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

Android开发:如何从RecyclerView Adapter向Fragment传递数据

解决RecyclerView条目点击传递数据到Fragment的问题

步骤1:确保数据模型可序列化

你的DSModel需要实现Serializable接口,才能在Fragment间传递对象:

data class DSModel(val index: String, val name: String) : Serializable

步骤2:配置导航图参数

打开导航图文件(通常是res/navigation/nav_graph.xml),找到跳转的action节点,添加参数配置:

<action
    android:id="@+id/action_data_structure_list_to_fragment_AlgorithmDetail"
    app:destination="@id/fragment_AlgorithmDetail">
    <!-- 替换com.yourpackage为你的DSModel所在的实际包名 -->
    <argument
        android:name="algorithm_data"
        app:argType="com.yourpackage.DSModel" />
</action>

步骤3:在列表Fragment中传递选中数据

修改FragmentDSList的点击事件逻辑,获取选中位置的DSModel并通过导航传递:

adapter = DSAdapter(DSModelArrayList,object: DSAdapter.RecyclerViewEvent {
    override fun onItemClick(position: Int) {
        val selectedModel = DSModelArrayList[position]
        val navController = findNavController()
        
        // 用Bundle封装数据并传递
        val bundle = Bundle().apply {
            putSerializable("algorithm_data", selectedModel)
        }
        navController.navigate(R.id.action_data_structure_list_to_fragment_AlgorithmDetail, bundle)
    }
})

步骤4:在详情Fragment中接收并使用数据

修改FragmentAlgorithmDetail,在生命周期方法中获取传递的数据:

class FragmentAlgorithmDetail : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            val algorithmData = it.getSerializable("algorithm_data") as DSModel
            // 此处可处理数据,比如打印日志
            Log.d("DetailFragment", "算法名称:${algorithmData.name},索引:${algorithmData.index}")
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.algorithm_detail, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        arguments?.let {
            val algorithmData = it.getSerializable("algorithm_data") as DSModel
            // 假设布局中有显示名称和索引的TextView,赋值显示
            view.findViewById<TextView>(R.id.tv_detail_name).text = algorithmData.name
            view.findViewById<TextView>(R.id.tv_detail_index).text = algorithmData.index
        }
    }
}

更安全的方案:使用Navigation Safe Args

Safe Args可以避免参数名拼写错误,步骤如下:

  1. 在app模块的build.gradle中添加插件:
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    // 添加这行
    id "androidx.navigation.safeargs.kotlin"
}
  1. 同步项目后,导航图会自动生成对应的Args类
  2. 在FragmentDSList中传递数据:
val action = FragmentDSListDirections.actionDataStructureListToFragmentAlgorithmDetail(selectedModel)
navController.navigate(action)
  1. 在FragmentAlgorithmDetail中接收数据:
val args = FragmentAlgorithmDetailArgs.fromBundle(requireArguments())
val algorithmData = args.algorithmData
// 使用数据更新UI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:00:00