onBindViewHolder()
будет вызываться все время, когда ваши представления появляются на экране, поэтому он называется больше, чем количество ваших элементов.Вы будете создавать много дублирующих слушателей, когда вы будете прокручивать.Установка слушателя в ViewHolder создаст одного слушателя на каждого владельца.Вот код:
class MyRVAdapter() : RecyclerView.Adapter<MyRVAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.myButton.text = "set here all except listener"
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.my_cv, parent, false)
return ViewHolder(v)
}
override fun getItemCount(): Int {
return myList.size
}
class ViewHolder (itemView: View) : RecyclerView.ViewHolder(itemView) {
var myButton: Button = itemView.findViewById(R.id.btn_A)
init {
myButton.setOnClickListener {
val customView = View.inflate(itemView.context, R.layout.fragment_dialog, null)
val builder = AlertDialog.Builder(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()
val tabLayout = customView.findViewById(R.id.mTabLayout)
val viewPager = customView.findViewById(R.id.mViewPager)
val adapter = TabbedDialogAdapter(childFragmentManager)//i dont understand how you get this but it is another question
adapter.addFragment("Tab A", TabbedDialogFragment.createInstance("Description A"))
adapter.addFragment("Tab B", TabbedDialogFragment.createInstance("Description B"))
adapter.addFragment("Tab C", TabbedDialogFragment.createInstance("Description C"))
viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager)
}
}
}
}