У меня есть CardViewAdapter, который отображает список папок по вертикали, а затем внутренний horizontalAdapter отображает содержимое папки по горизонтали следующим образом:
class CardViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var collectionItems : CollectionItems? = null
fun setData(collectionItems : CollectionItems) {
this.collectionItems = collectionItems
this.notifyDataSetChanged()
}
fun updateRow(resourceID : String){
this.collectionItems?.resourceList?.forEach { map ->
map.value.forEach { resourceWState ->
if (resourceWState.component?.uuid == resourceID) {
val index = (this.collectionItems?.resourceList!!.keys).indexOf(map.key)
this.notifyItemChanged(index) // This works but it updates the whole row, not item
}
}
}
}
private inner class ViewHolderCard internal constructor(itemView: View, var resource : ResourceWithState? = null, var tabKeyHolder : Int? = null) : RecyclerView.ViewHolder(itemView) {
internal var fragmentCallback: FragmentCallback? = null
internal var horizontalAdapter: ResourcesByCategoryAdapter? = ResourcesByCategoryAdapter()
internal var mLastClickTime : Long = 0
init {
itemView.inner_recyclerview.layoutManager = LinearLayoutManager(itemView.context, LinearLayoutManager.HORIZONTAL, false)
itemView.inner_recyclerview.isNestedScrollingEnabled = false
itemView.inner_recyclerview.layoutManager!!.isItemPrefetchEnabled = true
itemView.inner_recyclerview.setHasFixedSize(true)
itemView.inner_recyclerview.setItemViewCacheSize(20)
horizontalAdapter?.hasStableIds()
horizontalAdapter?.courseID = courseID
itemView.inner_recyclerview.adapter = horizontalAdapter
fragmentCallback = itemView.context as FragmentCallback
}
internal fun bind(position: Int) {
val dataList = ArrayList(collectionItems!!.resourceList.values)[position]
tabKeyHolder = tabKey
resource = ArrayList(collectionItems!!.resourceList.keys)[position]
val convertToArray : ArrayList<ResourceWithState> = ArrayList()
dataList.toCollection(convertToArray)
horizontalAdapter!!.setData(convertToArray)
horizontalAdapter!!.setCategory(itemView.book_category.text.toString())
// How to call this?
fun updateItem(resourceUUID: String){
horizontalAdapter!!.update(resourceUUID)
}
}
}
И это упрощенный класс CollectionItems:
Я хотел бы обновить imageView в одном из элементов внутри папки при загрузке элемента. У меня уже есть широковещательный приемник во фрагменте, который вызывает метод updateRow
. Это работает, но я хотел бы иметь возможность обновлять элемент, а не строку. Как мне получить доступ к методу updateItem
в ViewHolder?
// How to call this?
fun updateItem(resourceUUID: String){
horizontalAdapter!!.update(resourceUUID)
}