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可以避免参数名拼写错误,步骤如下:
- 在app模块的
build.gradle中添加插件:
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' // 添加这行 id "androidx.navigation.safeargs.kotlin" }
- 同步项目后,导航图会自动生成对应的Args类
- 在
FragmentDSList中传递数据:
val action = FragmentDSListDirections.actionDataStructureListToFragmentAlgorithmDetail(selectedModel) navController.navigate(action)
- 在
FragmentAlgorithmDetail中接收数据:
val args = FragmentAlgorithmDetailArgs.fromBundle(requireArguments()) val algorithmData = args.algorithmData // 使用数据更新UI
内容的提问来源于stack exchange,提问作者18.5
相关产品推荐
相关产品推荐

