如何使用来自 RecyclerView 元素的点击的导航组件?

Tsa*_*ary 9 navigation android-recyclerview android-architecture-navigation

我有一个提要片段,它的主要元素是帖子的 RecyclerView。

我正在使用 Lisa Wray 的 Groupie 库管理回收器 https://github.com/lisawray/groupie

现在在我的导航图中,我有一个将提要片段连接到另一个片段的操作,我尝试使用我在适配器的绑定函数中创建的点击侦听器来调用此操作。

val action=FeedFragmentDirections.actionDestinationFeedToDestinationAddToBucket(image.id)
findNavController().navigate(action)
Run Code Online (Sandbox Code Playgroud)

我一直收到一个错误说 navigation destination XXXXX is unknown to this NavController

我试过在findNavController(), like viewHolder.itemViewor之前添加一些东西,viewHolder.root但没有任何效果。

当我使用时,viewHolder.itemView.rootView我收到此错误,而不是View DecorView@a190adf[MainActivity] does not have a NavController set我不知道 DecorView 是什么。

任何想法如何正确实施我的 oncick 听众?

Fra*_*pos 6

使用 itemView 似乎也有效,因为这就是我的代码:

class RecyclerSettingsItem(
private val activity: MainActivity,
private val settingItem: String
) : Item<GroupieViewHolder>() {

override fun bind(viewHolder: GroupieViewHolder, position: Int) {

    var navController: NavController? = null

    viewHolder.apply {

        with(viewHolder.itemView) {

            tvTitle.text = settingItem

            itemView.setOnClickListener {

                navController = Navigation.findNavController(itemView)
                navController!!.navigate(R.id.action_settingsFragment_to_contactTracingFragment)

            }

        }

    }
}


override fun getLayout() = R.layout.rv_settings_item_row

}
Run Code Online (Sandbox Code Playgroud)


ila*_*har 4

您可以在 recyclerview 适配器构造函数中传递父片段或活动。

class MyRecylerViewAdapter(...your other args.., val parentFragment: Fragment)
Run Code Online (Sandbox Code Playgroud)

然后从你的parentFragment对象中找到navController

parentFragment.findNavController()
Run Code Online (Sandbox Code Playgroud)

编辑:您也可以直接传递navController,但为什么要传递parentFragmentContext如果您在应用程序中使用不同的主题,则应使用of来构建 Views 和 ViewHolder parentFragment.requireActivity,否则您的主题将不会应用于项目RecyclerView