Мое окно повторного просмотра (для просмотра в чате) правильно загружает представления, но когда я нажимаю на представление, оно выдает исключение приведения:
ViewHolderReceived cannot be cast to ViewHolderSent
ViewHolders:
class ViewHolderReceived(val view: View) : RecyclerView.ViewHolder(view) {
fun getItemDetails(): ItemDetailsLookup.ItemDetails<Long> =
object : ItemDetailsLookup.ItemDetails<Long>() {
override fun getPosition(): Int = adapterPosition
override fun getSelectionKey(): Long? = itemId
override fun inSelectionHotspot(e: MotionEvent): Boolean {
return true
}
}
fun bind(isSelected: Boolean = false) {
itemView.isSelected = isSelected
}
}
//#########################################################################
class ViewHolderSent(val view: View) : RecyclerView.ViewHolder(view) {
fun getItemDetails(): ItemDetailsLookup.ItemDetails<Long> =
object : ItemDetailsLookup.ItemDetails<Long>() {
override fun getPosition(): Int = adapterPosition
override fun getSelectionKey(): Long? = itemId
override fun inSelectionHotspot(e: MotionEvent): Boolean {
return true
}
}
fun bind(isSelected: Boolean = false) {
itemView.isSelected = isSelected
}
}
ItemDetailsLookup:
class MyItemDetailsLookup(private val recyclerView: RecyclerView) :
ItemDetailsLookup<Long>() {
override fun getItemDetails(event: MotionEvent): ItemDetails<Long>? {
val view = recyclerView.findChildViewUnder(event.x, event.y)
if (view != null) {
return if(recyclerView.getChildAdapterPosition(view) == 0){
(recyclerView.getChildViewHolder(view) as MyAdapter.ViewHolderReceived)
.getItemDetails()} else {
(recyclerView.getChildViewHolder(view) as MyAdapter.ViewHolderSent)
.getItemDetails()} // error here
}
return null
}
}
Независимо от того, какое представление коснулось, оно выдает одинаковую ошибку (для ViewHolderReceived или ViewHolderSent), но связывает их правильно в правильном порядке.
Примечание: Выдает ошибку только в том случае, если я касаюсь полученного представления после касания любого из отправленных представлений или наоборот
Найденное решение: Проблема заключалась в recyclerView.getChildAdapterPosition (глупо, я написал этополусонный).