[英]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.