[英]onclick listerner on recycleview to detail fragments not working
I am trying to configure an onclick listerner on a recyclerView to click on items so each click on an item can go to its detail fragment.我正在尝试在 recyclerView 上配置 onclick listerner 以单击项目,以便每次单击项目都可以 go 到其详细信息片段。 I have been trying to use the method "onBindViewHolder" but no luck.
我一直在尝试使用方法“onBindViewHolder”,但没有成功。 I am not sure if I can use an interface or just the mentioned method.
我不确定我是否可以使用接口或只是提到的方法。
========================================================================================
The Adapter
class TensesAdapter(private val sectionList : ArrayList<Tenses>) : RecyclerView.Adapter<TensesAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.list_item,
parent, false)
return MyViewHolder(itemView)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = sectionList[position]
holder.sectionImage.setImageResource(currentItem.sectionImage)
holder.tvHeading.text = currentItem.sectionHeading
holder.itemView.setOnClickListener(object :View.OnClickListener {
}
})
}
override fun getItemCount(): Int {
return sectionList.size
}
class MyViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
val sectionImage : ImageView = itemView.findViewById(R.id.sectionImage)
val tvHeading : TextView = itemView.findViewById(R.id.sectionHeading)
}
You can use an interface ,你可以使用一个接口,
interface OnTensesClickListener {
fun onItemClick(tenses : Tenses)
}
In your TensesAdapter
,在你的
TensesAdapter
中,
class TensesAdapter(private val sectionList : ArrayList<Tenses>, private val onTensesClickListener: OnTensesClickListener): RecyclerView.Adapter<TensesAdapter.MyViewHolder>() {
// Your Code...
}
In onBindViewHolder
,在
onBindViewHolder
中,
holder.itemView.setOnClickListener(object :View.OnClickListener {
onTensesClickListener.onItemClick(currentItem)
})
Finally, in fragment while initializing...最后,在片段中初始化......
val adapter = TensesAdapter(sectionList, object: OnTensesClickListener {
fun onItemClick(currentItem) {
// Navigate to other fragment
}
})
Hello my friend,
Thank you very much for your feeback, I have entered the below code on the adapter and the fragment, but I am just missing the code to put on the on-click listerner to go to the specific position when an item is clicked.
Adapter
interface OnTensesClickListener {
fun onItemClick(tenses : Tenses)
}
class TensesAdapter(private val sectionList : ArrayList<Tenses>,private val onTensesClickListener: OnTensesClickListener) : RecyclerView.Adapter<TensesAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.list_item,
parent, false)
return MyViewHolder(itemView)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = sectionList[position]
holder.sectionImage.setImageResource(currentItem.sectionImage)
holder.tvHeading.text = currentItem.sectionHeading
holder.itemView.setOnClickListener(object :View.OnClickListener {
override fun onClick(p0: View?) {
TODO("Not yet implemented")
}
})
}
override fun getItemCount(): Int {
return sectionList.size
}
class MyViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
val sectionImage : ImageView = itemView.findViewById(R.id.sectionImage)
val tvHeading : TextView = itemView.findViewById(R.id.sectionHeading)
}
}
Fragment
package com.baonumerique.loba
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
val adapter = TensesAdapter(sectionList, object: OnTensesClickListener {
fun onItemClick(currentItem) {
// Navigate to other fragment
}
})
class PresentTenseFragment : Fragment() {
// TODO: Rename and change types of parameters
private var param1: String? = null
private var param2: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_present_tense, container, false)
}
companion object {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment PresentTenseFragment.
*/
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(param1: String, param2: String) =
PresentTenseFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
}
Thank you very much my friend, it now works.非常感谢你,我的朋友,它现在可以工作了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.