如何解决将 Android Jetpack Navigation 与 RecyclerView 列表一起使用?
我目前正在开发的应用程序有一个 RecyclerView,显示从数据库生成的可选项目列表,该列表转换为条目的详细视图。它运行良好,但如果我打算将 id 传递给更多片段,它看起来最终会输入很多 companion objects
和 supportFragmentManger.beginTransaction()
行。
而使用 Jetpack Navigation
代码似乎更简单。在片段之间设置导航非常简单,但在您使用 RecyclerView.ViewHolder
时似乎无法找到有关如何执行此操作的任何信息。
当前方法:
interface Callbacks{ fun onItemSelected(itemId: String) }
private inner class itemHolder(view: View) : RecyclerView.ViewHolder(view),View.OnClickListener{
override fun onClick(v: View?){ callbacks?.onItemSelected(itemId.id) }
}
使用 Navigation safeargs 传递 itemId 是有道理的,但这会在 onClick()
中实现吗?像这样吗?
override fun onClick(v: View?){
val action = ItemListFragmentDirections.navigateToDetailsFragmentAction(itemId)
v.findNavController().navigate(action)
}
我看到了 2 篇关于使用 Navigation 和 RecyclerView 进行共享元素转换的帖子,但他们的重点是转换,我不知道他们实际上是如何处理 ViewHolder 中的点击事件的。
编辑:
在玩了一段时间之后,简短的回答是肯定的。将操作保存在 onClick()
中并调用 navigate(action)
确实有效,但是在目标片段中获取安全参数与在 android safeargs 开发者指南中不同。
val args: ConfirmationFragmentArgs by navArgs()
生成错误,因为 navArgs 显然需要一个类型。 navArg<>()
。
我不知道它想要什么,所以我最终使用了:
val itemId: String = DetailFragmentArgs.fromBundle(requireArguments()).itemId
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。