Вы никогда не инициализируете imageView.Поскольку вы используете (?.) При настройке onClickListner для ImageView, вы не получите никакого сбоя из-за безопасного вызова.Один из лучших способов сделать это:
class ShowDuesFragment: Fragment () {переопределить fun onCreateView (inflater: LayoutInflater, container: ViewGroup ?, saveInstanceState: Bundle?): View?= inflater.inflate (R.layout.fragment_show, контейнер, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val adapter = Adapter(mutableListOf(..), fragmentmanager!!)
recycler_view.apply {
layoutManager = LinearLayoutManager(activity!!.applicationContext)
setHasFixedSize(true)
this.adapter = adapter
}
}
}
Адаптер класса (список приватных значений: список, менеджер приватных значений: FragmentManager, приватный вид изображений imageView:ImageView?): RecyclerView.Adapter {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
ViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.card_view,
parent,
false
),
parent.context,
manager
)
override fun getItemCount() = list.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.putData(list[position])
}
class ViewHolder (itemView: просмотр, контекст: контекст, менеджер: FragmentManager): RecyclerView.ViewHolder (itemView), DatePickerDialog.OnDateSetListener{lateinit var item: Due
init {
val imageView = itemView //Cast this to image view if required you can use itemView.findViewById for other //views.
Log.i("ViewHolder", (imageView == null).toString()) //log prints 'true'
imageView?.setOnClickListener {
val popup = PopupMenu(context, it)
popup.menuInflater.inflate(R.menu.menu_popup, popup.menu)
popup.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.notify -> {
val datePicker = DatePickerFragment()
datePicker.show(manager, "DatePickerFragment")
}
}
context.toast((item as Due).name)
true
}
popup.show()
}
}
fun putData(due: Due) {
…
item = due
}
…
}