簡體   English   中英

如何在 recyclerView 中設置 OnclickListener 以進行另一個活動

[英]How to set OnclickListener in recyclerView for going another activity

**大家好。 我是 android 開發的新手。 我正在使用房間數據庫,並在 recyclerView 中設置數據。 現在,當我單擊任何 recyclerview 項目時,我正在嘗試做,然后我需要 go 另一個活動。任何人請幫助我。 **

MainActivity RecyclerView 添加代碼

 private fun setUpListOfDataIntoRecyclerView(registerList:ArrayList<registerEntity>,
                                                registerDao: registerDao){

        if(registerList.isNotEmpty()){
            var itemAdapter = MainAdapter(registerList)
            
            binding?.rvHappyPlaceList?.layoutManager = LinearLayoutManager(this)
            binding?.rvHappyPlaceList?.adapter = itemAdapter
            binding?.rvHappyPlaceList?.visibility = View.VISIBLE
            binding?.noRecordText?.visibility = View.GONE
        }else{
            binding?.rvHappyPlaceList?.visibility = View.GONE
            binding?.noRecordText?.visibility = View.VISIBLE
        }
    }

主適配器

class MainAdapter(val items: ArrayList<registerEntity>):
    RecyclerView.Adapter<MainAdapter.MainHolder>() {

    //step 2
    private var onClickListener: AdapterView.OnItemClickListener? = null

    inner class MainHolder(var binding: ItemHappyPlaceBinding): RecyclerView.
                           ViewHolder(binding.root) {
                                val llTitle = binding.tvTitle
                                 val llDescription = binding.tvDescription
                                  var llImage = binding.ivPlaceImage
                         }

    fun setOnClickListener(onClickListener: View.OnContextClickListener){
        this.onClickListener = onClickListener
    }



    override fun onBindViewHolder(holder: MainHolder, position: Int) {
        val item = items[position]
        holder.llTitle.text = item.title
        holder.llDescription.text = item.description
        holder.llImage.setImageURI(Uri.parse(item.image))
    }

我建議您更換:

private var onClickListener: AdapterView.OnItemClickListener? = null

有了這個:

var onItemClick: (() -> Unit)? = null

您還可以刪除有趣的 setOnClickListener(..){}

並在您的 MainHolder 中添加 binding.root.setOnClickListener{},例如:

inner class MainHolder(var binding: ItemHappyPlaceBinding): RecyclerView.ViewHolder(binding.root) {
  init {
    binding.root.setOnClickListener {
      onItemClick?.invoke()
    }
  }
  
  val llTitle = binding.tvTitle
  val llDescription = binding.tvDescription
  var llImage = binding.ivPlaceImage
}

或者,如果您願意,您也可以在 onBindViewHolder 中添加 onItemClick?.invoke(),例如:

  holder.itemView.setOnClickListener {
    onItemClick?.invoke()
  }

然后在您的活動中,在有趣的 setUpListOfDataIntoRecyclerView 中添加:

var itemAdapter = MainAdapter(registerList)
itemAdapter.onItemClick = this::goToActivity() 

並添加 goToActivity 樂趣,例如:

fun goToActivity(){
  // launch the activity
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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