【发布时间】:2020-09-29 15:09:49
【问题描述】:
所以我的 ViewModel 中有一个列表,每当发生变化时,它们都会通过 DataBinding 反映在 UI 上。
private val _entries = MutableLiveData<List<BarEntry>>()
val entries: LiveData<List<BarEntry>>
get() = _entries
ISortingAlgorithm 是一个表示排序算法的接口。
interface ISortingAlgorithm
{
fun sort(listToSort: List<BarEntry>)
}
实现ISortingAlgorithm的具体类的示例(不是最终实现):
class BubbleSort : ISortingAlgorithm
{
override fun sort(listToSort: List<BarEntry>)
{
Log.d(this::class.java.canonicalName, "Applying sort")
for(currentPass in 0 until (listToSort.size - 1))
{
for(currentPosition in 0 until (listToSort.size - currentPass - 1))
{
if(listToSort[currentPosition].y > listToSort[currentPosition + 1].y)
{
val temp = listToSort[currentPosition].y
listToSort[currentPosition].y = listToSort[currentPosition+1].y
listToSort[currentPosition+1].y = temp
}
Thread.sleep(10)
}
}
}
}
在我的 ViewModel 中,我有一个 lateinit var sortingAlgorithm: ISortingAlgorithm。当我调用sortingAlgorithm.sort(_entries.value) 时,我希望 UI 能够反映在每个步骤中对列表所做的所有修改,而不仅仅是最终结果。如何做到这一点?
我现在的解决方案是让sort() 返回列表的所有中间状态,然后将更改应用到视图模型中的原始 LiveData 列表,但这似乎是一种解决方法而不是解决方案。
【问题讨论】:
-
贴出SortingAlgorithm的内容
-
编辑了原帖。
标签: android kotlin android-livedata