You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Kotlin中RecyclerView点击跳转另一Activity问题求助

问题修复方案

核心问题点

  • 接口回调没有绑定触发逻辑:你给ViewHolder实现了点击监听接口,但从未给itemView或卡片内按钮设置点击事件来触发这个接口,所以onItemClick永远不会被调用
  • 点击逻辑嵌套错误:你在CurrentSch的onItemClick方法内部才给编辑按钮设置点击监听,相当于只有先触发回调才会给按钮加监听,逻辑完全倒置
  • Adapter内编辑按钮点击判断错误:你在Adapter里给pushimg设置的点击逻辑判断context是UpdateDataInfo类型,但当前context是CurrentSch,判断永远不成立,点击不会触发任何操作

修复代码

1. 修正EventAdapter代码

class EventAdapter(var mListener: onItemClickListener, var context: Context, val items: ArrayList<EventModelk>):
        RecyclerView.Adapter<EventAdapter.ViewHolder>()  {

    interface onItemClickListener {
        // 直接把点击的条目数据传出去,不用只传位置
        fun onEditClick(item: EventModelk)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
            val itemview = LayoutInflater.from(context).inflate(
                R.layout.eventitems,
                parent,
                false,
            )
        return ViewHolder(itemview, mListener)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = items[position]
        holder.setEmail.text = item.eEmail
        holder.setNotes.text = item.nNotes
        holder.setData.text = item.dDate
        holder.setTime.text = item.tTime
        if (item.repeat == 1) {
            holder.setReap.isChecked = true
        }
        if (position % 2 == 0) {
            holder.main.setBackgroundColor(
                ContextCompat.getColor(
                    context,
                    R.color.colorLightGray
                )
            )
        } else {
            holder.main.setBackgroundColor(ContextCompat.getColor(context, R.color.colorWhite))
        }
        // 直接在绑定的时候给编辑按钮设置点击,触发回调
        holder.pushimg.setOnClickListener {
            mListener.onEditClick(item)
        }
    }

    override fun getItemCount(): Int {
    return items.size
    }

    class ViewHolder(view: View,onItemClickListener: onItemClickListener): RecyclerView.ViewHolder(view) {
        val main: CardView = view.IIMain
        val setData: TextView = view.set_date
        val setTime: TextView = view.set_time
        val setEmail: TextView = view.Tv_email
        val setNotes: TextView = view.set_note
        val setReap: CheckBox =view.is_repeat
        val pushimg: ImageView = view.img_edit
    }
}

2. 修正CurrentSch代码

class CurrentSch : AppCompatActivity(), EventAdapter.onItemClickListener {

    var STORAGE_LOCAL =true
    lateinit var eventlist: ArrayList<EventModelk>

    @RequiresApi(Build.VERSION_CODES.N)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.currentsch)

        btnNewApp2.setOnClickListener {
            val intent = Intent(this, NewPlan::class.java)
            startActivity(intent)
        }

        seeAllEventInPlan()
    }

    private fun getEventist(): ArrayList<EventModelk>{
        val eventdatabase = EventDatabasek(this)
        return eventdatabase.veiwEvent()
    }

    fun seeAllEventInPlan() {
        eventlist = getEventist()
        if(eventlist.size >0){
            ryc_eventLists.visibility = View.VISIBLE
            viewnotview.visibility = View.GONE
            ryc_eventLists.layoutManager = LinearLayoutManager(this)
            val eventAdapter = EventAdapter(this,this, eventlist)
            ryc_eventLists.adapter = eventAdapter
        }else{
            ryc_eventLists.visibility = View.GONE
            viewnotview.visibility = View.VISIBLE
        }
    }
    
    // 直接接收回调的条目数据,跳转Activity
    override fun onEditClick(item: EventModelk) {
        val intent = Intent(this, UpdateDataInfo::class.java)
        // 可以直接传序列化的对象,也可以传id/位置按需调整
        intent.putExtra("event_data", item)
        startActivity(intent)
    }
}

额外注意事项

  • 如果你的EventModelk没有实现序列化接口,需要给类加上@Serializable或者Parcelable注解才能直接通过Intent传递
  • 如果需要传位置也可以调整接口参数,按需修改即可

内容的提问来源于stack exchange,提问作者WilliamB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:15:02