请教下 ViewModel 和 Adapter 该如何结合以实现动态加载

如题,我的 ViewModel 类中有一个列表结构的数据,需要动态加载,代码如下:

class TimelineViewModel : ViewModel() {
    val timelines = MutableLiveData<List<TimelineModel>>(emptyList())

    private var nextTime = System.currentTimeMillis()

    fun getTimeline() {
    	viewModelScope.launch {
            try {
                val respData = Repository.getTimeline(nextTime)
                if (respData.data != null) {
                    nextTime = respData.data.feeds.nextTime
                    val timelineModels = respData.data.feeds.data.filterNotNull().map {
                        TimelineModel(it)
                    }
                    timelines.value = timelines.value.let {
                        if (it == null) {
                            timelineModels
                        } else {
                            it + timelineModels
                        }
                    }
                }
            } catch (e: Exception) {
                Log.e(TAG, "Network Request Fail", e)
            }
        }
    }
}
  • 如果在视图层直接使用 MutableLiveData#observe 方法观察这个数据,那么观察到的是整个 List 数据的变化,那么该怎么将其转化为 Adapter 的添加元素的行为?
  • 或者应该怎么处理这种需要修改列表数据的场景?

nexttime

val

viewmodel

lue

3 条回复    2021-08-24 19:57:24 +08:00

omysho
    1

omysho   15 天前 via Android   ❤️ 1

有个东西叫 DiffUtil

还有个东西叫 AsyncListDiffer

还有个东西叫 ListAdapter 继承自 Recycler.Adapter 需要一个 ItemDiffCallback 作为构造参数

pigspy
    2

pigspy   15 天前

@omysho

非常感谢

122006
    3

122006   5 天前

androidx 的 recycleview 自带,直接继承 listadapter 就行