簡體   English   中英

Recycler查看理解

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM