[英]RecyclerView understanding
我正在嘗試編寫一個 Android 應用程序,其中包含一個可滾動列表又名 RecyclerView,感謝本教程: https://www.avinsharma.com/android-basics-recyclerview-II/我設法使條目可點擊,但是什么我還不明白以下內容:
我的適配器:
class ExerciseAdapter(private val context: Context, private val dataset: List<Exercise>,
private val mOnClickListener: ExerciseAdapter.addRepClickListener)
: RecyclerView.Adapter<ExerciseAdapter.ItemViewHolder>(){
適配器中的 Onclick:
override fun onClick(v: View?) {
val position = adapterPosition
mOnClickListener.addRep(position)
Log.d(TAG, ""+position+"Clicked!")
}
我來自 Mainactivity 的電話工作正常:
recyclerView.adapter = ExerciseAdapter(this, myDataset, this)
所以我很自然地在適配器內部嘗試了這個:
override fun onClick(v: View?) {
val position = adapterPosition
context.addRep(position)
Log.d(TAG, ""+position+"Clicked!")
}
但它失敗了,我對這個東西很陌生,為什么它不起作用它到底是同一個 object? 另外我希望每個條目有多個可點擊區域,所以我最終會通過4-5 次並實現 5 個不同的界面? 必須有更好的清潔方法。
另外,我如何從 Mainactivity 訪問單擊的 View Siblings? 像這樣:
override fun addRep(position: Int) {
textview_counter.text = textview_counter.text ++
}
這是我的適配器的代碼
class ExerciseAdapter(
private val context: Context,
private val dataset: List<Exercise>,
private val mOnClickListener: ExerciseAdapter.addRepClickListener
) : RecyclerView.Adapter<ExerciseAdapter.ItemViewHolder>() {
private val TAG = javaClass.simpleName
interface addRepClickListener {
fun addRep(position: Int)
}
inner class ItemViewHolder(private val view: View): RecyclerView.ViewHolder(view), View.OnClickListener{
val tvVideo = view.findViewById<TextView>(R.id.tevi_video)
val textActualreps = view.findViewById<TextView>(R.id.tevi_reps)
val tvAddrep = view.findViewById<TextView>(R.id.tevi_plus)
val textName = view.findViewById<TextView>(R.id.tevi_name)
val textLoad = view.findViewById<TextView>(R.id.tevi_load)
init{
tvAddrep.setOnClickListener(this)
}
override fun onClick(v: View?) {
val position = adapterPosition
mOnClickListener.addRep(position)
Log.d(TAG, ""+position+"Clicked!")
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
// create a new view
val adapterLayout = LayoutInflater.from(parent.context)
.inflate(R.layout.list_ex, parent, false)
return ItemViewHolder(adapterLayout)
}
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
val exercise = dataset[position]
holder.textName.text = exercise.exerciseName
holder.textLoad.text = exercise.load.toString()
}
override fun getItemCount() = dataset.size
fun addRep(holder: ItemViewHolder){
}
}
幫助表示贊賞:-)
嘗試像這樣更改適配器的代碼
class ExerciseAdapter(
private val context: Context,
private val dataset: List<Exercise>,
private val mOnClickListener: ExerciseAdapter.addRepClickListener
) : RecyclerView.Adapter<ExerciseAdapter.ItemViewHolder>() {
private val TAG = javaClass.simpleName
inner class ItemViewHolder(private val view: View): RecyclerView.ViewHolder(view) {
val tvVideo = view.findViewById<TextView>(R.id.tevi_video)
val textActualreps = view.findViewById<TextView>(R.id.tevi_reps)
val tvAddrep = view.findViewById<TextView>(R.id.tevi_plus)
val textName = view.findViewById<TextView>(R.id.tevi_name)
val textLoad = view.findViewById<TextView>(R.id.tevi_load)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val adapterLayout = LayoutInflater.from(parent.context).inflate(R.layout.list_ex, parent, false)
return ItemViewHolder(adapterLayout)
}
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
val exercise = dataset[position]
holder.textName.text = exercise.exerciseName
holder.textLoad.text = exercise.load.toString()
holder.setOnClickListener {
addRep(position)
Log.d(TAG, ""+position+"Clicked!")
}
}
override fun getItemCount() = dataset.size
private fun addRep(position: Int){
// Exec your code for the on click event...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.