繁体   English   中英

Kotlin在RecycleView项目中打开AlertDialog,单击

[英]Kotlin open AlertDialog in RecycleView item click

我有RecyclerView ,我想在AlertDialog RecyclerView项时打开AlertDialog ,我试图遵循“ 基于Java的问题”的概念,但对我没有用

我的适配器

class OperationAdapter (val context: Context,private val arrayList: ArrayList <Operations>):
RecyclerView.Adapter <OperationAdapter.Holder> () {

companion object {
    val TAG: String = OperationAdapter::class.java.simpleName
}

override fun onCreateViewHolder (parent: ViewGroup, viewType: Int): Holder {
    return Holder (LayoutInflater.from (parent.context ).inflate (R.layout.operaitemlist , parent, false))
}

override fun getItemCount (): Int = arrayList. size

override fun onBindViewHolder (holder: Holder, position: Int) {

    val opera = arrayList[position]
    holder.setData(opera, position)

}

inner class Holder (itemView: View): RecyclerView.ViewHolder (itemView) {

    private var currentOpera: Operations? = null
    private var currentPosition: Int = 0


    init {

        itemView.cardview.setOnClickListener {
            currentOpera?.let {

                AlertDialog.Builder(context)
                    .setTitle("My Title")
                    .setMessage("My Message")
                    .create()
                    .show()

            }
        }

        //the end of the init
    }

    //getting data from Operations and bind it into View
    fun setData(operation: Operations?, position: Int) {
        operation?.let {
            itemView.txtphonenumber.text = operation.phone
            itemView.txttime.text = operation.etime
        }

        this.currentOpera = operation
        this.currentPosition = position
    }
}

设置回收站视图

//set up the recycleview
    mRecyclerView.setHasFixedSize (true)
    mRecyclerView. layoutManager = LinearLayoutManager(this)

          //adapter
          val adapter = OperationAdapter(applicationContext,arrayList)
                        adapter.notifyDataSetChanged()
                        mRecyclerView.adapter = adapter

请任何建议

您的代码有效,我检查并复制了您的Adapter的代码,它正常工作,向我发送了您的xml布局和Adapter初始化代码

更新:

您无法发送applicationContext,而应发送活动的上下文。 修复以下问题: val adapter = OperationAdapter(this, arrayList )您不能在应用程序类中创建对话框,因为该对话框应附加到窗口,应用程序不是UI类且没有窗口,因此无法显示对话框。

首先,永远不要将onclick放在onBindViewHolder中。 那不是一个好习惯。 其次,如果要对项目执行任何click事件,则可以转到界面,也可以将项目单击侦听器放在扩展RecyclerView.ViewHolder的ViewHolder类(内部类)中。

item.setOnClickListenr{
  AlertDialog.Builder(this)
            .setTitle("My Title")
            .setMessage("My Message"))
            .setPositiveButton("Yes") { dialog, which -> todoFunctiononpositiveclick() }
            .setNegativeButton("No") { dialog, which -> dialog.dismiss() }
            .show()
 }

使用此链接可更好地了解使用接口https://android.jlelse.eu/click-listener-for-recyclerview-adapter-2d17a6f6f6c9与适配器进行交互的情况

您忘记了create()

val alertDialog = AlertDialog.Builder(context)
        .setTitle("My title")
        .setCancelable(true)
        .setMessage("My message")
        .create()

        alertDialog.show()

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM