【发布时间】:2019-02-27 20:20:20
【问题描述】:
有谁知道我需要为 RecyclerView 适配器中的单击侦听器使用哪个上下文(如果有的话),而无需创建新的 DialogFragment 类?我将来需要访问和使用对话框的视图。 以前使用的代码是我过去用于我的 RecyclerView 适配器的,但现在在需要使用自定义视图时它是多余的。
未解决的参考:'layoutInflater'
以前使用的代码
holder.myButton.setOnClickListener {
val builder = android.app.AlertDialog.Builder(holder.itemView.context)
builder.setIconAttribute(R.attr.ivInfo)
builder.setTitle(R.string.dialog_title)
builder.setMessage(R.string.dialog_message)
builder.setView(R.layout.custom_view)
builder.setPositiveButton(android.R.string.ok){ dialog, _ -> dialog.dismiss() }
val dialog: android.app.AlertDialog = builder.create()
dialog.show()
}
当前代码
class MyRVAdapter() : RecyclerView.Adapter<MyRVAdapter.ViewHolder>() {
override fun getItemCount(): Int {
return myList.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.myButton.setOnClickListener {
customView = holder.itemView.context.this.layoutInflater.inflate(R.layout.fragment_dialog, null)
val builder = AlertDialog.Builder(holder.itemView.context)
builder.setIconAttribute(R.attr.imgNight)
builder.setTitle(R.string.dialog_title)
builder.setView(customView)
builder.setPositiveButton(android.R.string.ok){ dialog, _ -> dialog.dismiss() }
builder.show()
tabLayout = customView.findViewById(R.id.mTabLayout)
viewPager = customView.findViewById(R.id.mViewPager)
val adapter = TabbedDialogAdapter(childFragmentManager)
adapter.addFragment("Tab A", TabbedDialogFragment.createInstance("Description A"))
adapter.addFragment("Tab B", TabbedDialogFragment.createInstance("Description B"))
adapter.addFragment("Tab C", TabbedDialogFragment.createInstance("Description C"))
customView.mViewPager.adapter = adapter
customView.mTabLayout.setupWithViewPager(customView.mViewPager)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.my_cv, parent, false)
return ViewHolder(v)
}
class ViewHolder (itemView : View):RecyclerView.ViewHolder(itemView) {
val myButton = itemView.findViewById<Button>(R.id.btn_A)!!
}
}
【问题讨论】:
-
只需将您的活动用作上下文。
-
@RaymondArteaga 你的意思是在某处使用
getActivity吗? -
在 onBindViewHolder() 中设置监听器不是一个好主意。您应该改为创建 ViewHolder。在 ViewHolder 或 onCreateViewHolder() 的构造函数中。在那里你会有
View,你可以使用view.context -
@underoid 查看我对当前代码的最新代码编辑
-
为什么要在
onBindViewHolder中创建AlertDialog或创建adapter对象?onBindViewHolder用作Views和数据的活页夹。这意味着您的对话框和适配器将根据您的列表大小创建多次
标签: android kotlin android-dialogfragment android-dialog onitemclicklistener