如何使用导航组件,点击来自回收器视图元素



我有一个提要片段,它的主要元素是帖子的回收器视图。

我正在管理丽莎·雷的群星图书馆的回收商https://github.com/lisawray/groupie

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

val action=FeedFragmentDirections.actionDestinationFeedToDestinationAddToBucket(image.id)
findNavController().navigate(action)

我不断收到一条错误消息,说navigation destination XXXXX is unknown to this NavController

我尝试在findNavController()之前添加一些东西,例如viewHolder.itemViewviewHolder.root但没有任何效果。

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

有什么想法可以正确实现我的 oncick 监听器吗?

使用 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
}

只需在RecyclerView Adaptor类的承包商中传递导航控制器即可。爪哇示例

public RecyclerAdaptorMasseges(Context context, List<ConfirmationMessagesModuel> data, NavController navController) {
    inflate = LayoutInflater.from(context);
    this.data = data;
    this.navController = navController;
    Log.d("hex", " MsgRecyclerAdaptor");
}
可以在

RecylerView 适配器构造函数中传递父片段或活动。

class MyRecylerViewAdapter(...your other args.., val parentFragment: Fragment)

然后从父片段对象中找到导航控制器

parentFragment.findNavController()

编辑:您也可以直接通过navController,但为什么要通过parentFragment?如果您在应用程序中使用不同的主题,则视图和视图持有人的构造应使用parentFragment.requireActivity Context完成,否则您的主题将不会应用于RecyclerView项。

 itemBinding.tvProfileBooked.setOnClickListener {
            val bundle = bundleOf("BookingId" to item.id)
            Navigation.findNavController(it).navigate(R.id.profileBookedFragment,bundle)
        }

现在配置文件片段

    val bookingId = arguments?.getString("BookingId")
    

它对我有用

class MyRecylerViewAdapter(...your other args.., val findNavController: NavController)
MyRecylerViewAdapter(..., findNavController())
你可以

使用'requireView(('

     requireView().findNavController().navigate(R.id.your_action)

我遇到了同样的问题,通过添加一个点击侦听器接口并在我的片段(或您的活动(中调用 navController 来解决它。

使用此示例:https://www.codexpedia.com/android/defining-item-click-listener-for-recyclerview-in-android/

我补充一下:

@Override
public void onClick(View view, int position) {
    Globals.eventList = developersLists.get(position);
    navController.navigate(R.id.eventoFragment);
}

相关内容

  • 没有找到相关文章

最新更新