У меня есть SelectableItemsAdapterDelegate
класс, который реализует интерфейс (чтобы уменьшить шаблон, реализующий эту функциональность). Мой адаптер также реализует этот интерфейс, но мне нужны некоторые взаимодействия с этим адаптером от делегата, например notifyDatasetChanged()
. Поэтому для конструктора SelectableItemsAdapterDelegate требуется ссылка на адаптер, которая недоступна во время создания. Какой шаблон можно использовать для решения вышеупомянутой проблемы, позволяя мне реализовать этот интерфейс различными типами RecyclerAdapter
?
Существует интерфейс, реализованный адаптером и делегатом:
interface ISelectableItemsAdapter<T> {
fun setSelected(pos: Int): Pair<Boolean, Int>
fun selectAll(): Pair<Boolean, Int>
fun deselectAll(): Pair<Boolean, Int>
val selected: Selection<T>
fun isSelected(pos: Int): Boolean
}
Эта функция требуется ссылка на адаптер от делегата:
override fun setSelected(pos: Int): Pair<Boolean, Int> {
if (selectedItems[pos] == null) {
selectedItems.put(pos, adapter.getItem(pos))
} else {
selectedItems.delete(pos)
}
adapter.notifyItemChanged(pos)
return getSelectedCount()
}