pigspy
V2EX  ›  Android

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

  •  
  •   pigspy · Aug 14, 2021 · 12277 views
    This topic created in 1732 days ago, the information mentioned may be changed or developed.

    如题,我的 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 replies    2021-08-24 19:57:24 +08:00
    omysho
        1
    omysho  
       Aug 14, 2021 via Android   ❤️ 1
    有个东西叫 DiffUtil

    还有个东西叫 AsyncListDiffer

    还有个东西叫 ListAdapter 继承自 Recycler.Adapter 需要一个 ItemDiffCallback 作为构造参数
    pigspy
        2
    pigspy  
    OP
       Aug 15, 2021
    @omysho

    非常感谢
    122006
        3
    122006  
       Aug 24, 2021
    androidx 的 recycleview 自带,直接继承 listadapter 就行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4212 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 00:06 · PVG 08:06 · LAX 17:06 · JFK 20:06
    ♥ Do have faith in what you're doing.