V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pigspy
V2EX  ›  Android

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

  •  
  •   pigspy · 2021-08-14 22:09:16 +08:00 · 8157 次点击
    这是一个创建于 1200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,我的 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 的添加元素的行为?
    • 或者应该怎么处理这种需要修改列表数据的场景?
    3 条回复    2021-08-24 19:57:24 +08:00
    omysho
        1
    omysho  
       2021-08-14 22:38:57 +08:00 via Android   ❤️ 1
    有个东西叫 DiffUtil

    还有个东西叫 AsyncListDiffer

    还有个东西叫 ListAdapter 继承自 Recycler.Adapter 需要一个 ItemDiffCallback 作为构造参数
    pigspy
        2
    pigspy  
    OP
       2021-08-15 10:18:35 +08:00
    @omysho

    非常感谢
    122006
        3
    122006  
       2021-08-24 19:57:24 +08:00
    androidx 的 recycleview 自带,直接继承 listadapter 就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5373 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 09:20 · PVG 17:20 · LAX 01:20 · JFK 04:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.