createNavigateOnClickListener

createNavigateOnClickListener

我想在onBindViewHolder中设置一个onclicklistener,以导航到其他片段并将一些数据发送到该片段。

对于我的一生,我似乎找不到找到使它起作用的方法。任何帮助都将不胜感激!

适配器类:

class ListAdapter(private val list: List<Workout>): RecyclerView.Adapter<WorkoutViewHolder>() {

    override fun getItemCount(): Int{
        return list.size
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WorkoutViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        return WorkoutViewHolder(layoutInflater, parent)
    }

    override fun onBindViewHolder(holder: WorkoutViewHolder, position: Int) {
        val workout: Workout = list[position]
        holder.itemView.setOnClickListener{
            Toast.makeText(holder.itemView.context, "TEST", Toast.LENGTH_LONG).show()
            val id = workout.workoutId
            val bundle = Bundle()
            bundle.putInt("workoutId", id)
            Navigation.createNavigateOnClickListener(R.id.workoutDetailsFragment)
        }
        holder.bind(workout)
    }
}

我可以吐司了,所以onclicklistener似乎正在工作。但是,导航部分不起作用。
如果我只是在承载recyclerview的片段中设置一个按钮并添加button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.workoutDetailsFragment)),它就可以导航。所以问题似乎是从onbindviewholder内部的onclicklistener内部调用导航功能

最佳答案

Navigation.createNavigateOnClickListener()创建一个OnClickListener。创建一个OnClickListener只是从不对任何内容进行设置不会做任何事情。

相反,您只想直接触发navigate()调用,执行与createNavigateOnClickListener内部执行的相同one line of code:

override fun onBindViewHolder(holder: WorkoutViewHolder, position: Int) {
    val workout: Workout = list[position]
    holder.itemView.setOnClickListener{
        Toast.makeText(holder.itemView.context, "TEST", Toast.LENGTH_LONG).show()
        val id = workout.workoutId
        val bundle = Bundle()
        bundle.putInt("workoutId", id)

        // Using the Kotlin extension in the -ktx artifacts
        // Alternatively, use Navigation.findNavController(holder.itemView)
        holder.itemView.findNavController().navigate(
            R.id.workoutDetailsFragment, bundle)
    }
    holder.bind(workout)
}

07-27 13:38