繁体   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