Обратите внимание, что все это работает через пейджинг с сетью Google. образец. Хотя что, идея есть.
@Sarquella помогла мне с этим решением. Добавьте эти классы в свой проект. По сути, мы расширяем ViewHolder
до LifeCycle Owner
, как это уже сделано по умолчанию с Activities
и Fragments
.
LifecycleViewHolder
:
abstract class LifecycleViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView),
LifecycleOwner {
private val lifecycleRegistry = LifecycleRegistry(this)
fun onAttached() {
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)
}
fun onDetached() {
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
}
override fun getLifecycle(): Lifecycle = lifecycleRegistry
}
LifecycleOwner
— это интерфейс с одним методом, который обозначает, что у класса есть Lifecycle
. Дополнительную информацию можно найти здесь.
LifecyclePagedListAdapter
:
abstract class LifecyclePagedListAdapter<T, VH : LifecycleViewHolder>(diffCallback: DiffUtil.ItemCallback<T>) :
PagedListAdapter<T, VH>(diffCallback) {
override fun onViewAttachedToWindow(holder: VH) {
super.onViewAttachedToWindow(holder)
holder.onAttached()
}
override fun onViewDetachedFromWindow(holder: VH) {
super.onViewDetachedFromWindow(holder)
holder.onDetached()
}
}
LifecycleAdapter
(если вам это нужно):
abstract class LifecycleAdapter<VH : LifecycleViewHolder> :
RecyclerView.Adapter<VH>() {
override fun onViewAttachedToWindow(holder: VH) {
super.onViewAttachedToWindow(holder)
holder.onAttached()
}
override fun onViewDetachedFromWindow(holder: VH) {
super.onViewDetachedFromWindow(holder)
holder.onDetached()
}
}
Затем расширяет MyAdapter
до LifecyclePagedListAdapter<MyEntity, LifecycleViewHolder>(MY_COMPARATOR)
и MyViewHolder
до LifecycleViewHolder(view)
. Вы должны будете завершить свои занятия на основе того, что мы изменили соответственно. Теперь мы можем наблюдать за объектом liveData
в классе MyViewHolder
. Таким образом, мы можем добавить это в класс MyViewHolder
(при условии, что вы используете внедрение зависимостей). По сути, мы будем делать то же самое, что и для Fragments
или Activities
:
private lateinit var myViewModel: MyViewModel
init {
(itemView.context as? AppCompatActivity)?.let{
myViewModel = ViewModelProviders.of(it).get(MyViewModel::class.java)
}
}
Затем внутри метода bind()
:
fun bind(myCell: MyEntity?) {
myViewModel.myLiveData.observe(this, Observer {
// Buala!! Check if it is the cell you want to change and update it.
if (it != null && myCell != null && it.id == myCell.id) {
updateCell(it)
}
})
}
person
Damia Fuentes
schedule
27.09.2018
Updating Paged Data
, последний абзац - person pskink   schedule 31.05.2018PagedListAdapter
? если да, то как тебеDiffCallback
? - person pskink   schedule 31.05.2018