尝试使用 onclick 在回收视图中打开另一个活动

Posted

技术标签:

【中文标题】尝试使用 onclick 在回收视图中打开另一个活动【英文标题】:Trying to open another activity in recycles view using onclick 【发布时间】:2021-10-21 09:39:19 【问题描述】:

尝试获取一个按钮以使用 kotlin 在 android studio 中打开另一个活动。我是用户回收视图这样做。我有查看卡并想编辑卡中的数据,因此我是用户 onClick 以使页面响应,但这似乎确实有效,我尝试对其进行研究,但没有任何东西可以理解。这是代码。

感谢您的帮助,我不胜感激

这是适配器类:

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



    interface onItemClickListener 
        fun onItemClick(position: Int)
    

    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
            // holder.setReap.text = item.repeat.toString()
        

        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 

            if (context is UpdateDataInfo) 
                (context as UpdateDataInfo).updateEvent(item)
            
        
//       interface onItemClickListener
//            fun onItemClick(position: Int)
    

    override fun getItemCount(): Int 
    return items.size
    

    class ViewHolder(view: View,onItemClickListener: onItemClickListener): RecyclerView.ViewHolder(view),onItemClickListener 

        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
        val onItemClickListener = onItemClickListener


        override fun onItemClick(position: Int) 
            onItemClickListener.onItemClick(absoluteAdapterPosition)
        

    
```

这是我获得点击以转到另一个活动的代码:

class CurrentSch : AppCompatActivity(), EventAdapter.onItemClickListener 

    //private var change =imageView2?.isClickable
    var STORAGE_LOCAL =true

    val 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 var change =imageView2?.isClickable

    private fun getEventist(): ArrayList<EventModelk>
        val eventdatabase = EventDatabasek(this)

        return eventdatabase.veiwEvent()
    

    fun seeAllEventInPlan() = if(getEventist().size >0)

        ryc_eventLists.visibility = View.VISIBLE
        viewnotview.visibility = View.GONE

        ryc_eventLists.layoutManager = LinearLayoutManager(this)
        val eventAdapter = EventAdapter(this,this, getEventist())
        ryc_eventLists.adapter = eventAdapter

    else
        ryc_eventLists.visibility = View.GONE
        viewnotview.visibility = View.VISIBLE
    
    override fun onItemClick(position: Int) 

        val item = eventlist[position]
        img_edit.setOnClickListener 
            val intent = Intent(this, UpdateDataInfo::class.java)
            intent.putExtra("Events", position)
            startActivity(intent)
        
    

【问题讨论】:

好吧,一切都已经很完美了,但是您将位置传递给意图将位置 int 更改为模型类。这仅在模型类可序列化或可打包时执行。 【参考方案1】:

onBindViewHolder 函数中,只需调用mListener.onItemClick(position),例如,如果您想在点击setData 时打开另一个Activity,那么您可以在onBindViewHolder 中编写以下代码

holder.setData.setOnClickListener  mListener.onItemClick(position) 

【讨论】:

这将如何帮助打开我想要访问的页面或活动?该程序刚刚关闭,没有错误。 @mightyWOZ【参考方案2】:

根据您上面的代码,您已经在调用适配器的地方进行了回调,您将在那里得到回调,并且您将在那里打开一个活动..但是您可以像这样简单地从适配器打开您的新活动..

holder.itemView.setOnClickListener(View.OnClickListener 

        val intent  = Intent (context,SomeActivity::class.java)
        context.startactivity(intent)
    )

【讨论】:

以上是关于尝试使用 onclick 在回收视图中打开另一个活动的主要内容,如果未能解决你的问题,请参考以下文章

如何在回收站视图android中选择多个项目?

如何从回收站视图 android 中传递一个 url onclick 项目并 onclick 获取位置 dipaly 在另一个活动中的 url

如何在recyclerView中管理点击事件

使用 OnClick 删除回收站视图中的项目。 Firebase 安卓

从回收视图中将回收视图项目添加到另一个屏幕 - kivy

OnClick 在片段的回收器适配器中无法正常工作