Я пытаюсь построить данные о Covid-19, используя линейную диаграмму, показывающую тенденцию по датам. Я пытаюсь реализовать это с помощью шаблона MVVM. Код в основном работает нормально, но пользовательский интерфейс зависает, когда я пытаюсь выполнить фильтрацию по США. Я подозреваю, что причина в большом времени отрисовки диаграмм.
Вот код во фрагменте:
homeViewModel.confirmeddataSetLive.observe(viewLifecycleOwner, Observer {
fragmentHomeBinding.confirmedChart.invalidate()
fragmentHomeBinding.confirmedChart.refreshDrawableState()
if (fragmentHomeBinding.confirmedChart.data == null
|| fragmentHomeBinding.confirmedChart.data.getDataSetCount() == 0
) {
fragmentHomeBinding.confirmedChart.data = LineData(it)
} else {
val set1 =
fragmentHomeBinding.confirmedChart.data.getDataSetByIndex(0) as LineDataSet
set1.setValues(it.values)
set1.notifyDataSetChanged()
fragmentHomeBinding.confirmedChart.data.notifyDataChanged()
fragmentHomeBinding.confirmedChart.notifyDataSetChanged()
}
})
Это код для модели просмотра:
private val confirmedLiveData=MutableLiveData<LineDataSet>()
val confirmeddataSetLive:LiveData<LineDataSet>
get() = confirmedLiveData
fun setDataToCharts(countryItemList: List<CountryDataItem>){
if(countryItemList.isNotEmpty()) {
val firstEntryTimestamp = convertStringToTimestamp(countryItemList[0].Date
val confirmedValues: ArrayList<Entry> = ArrayList()
for (i in countryItemList) {
val confirmedDate = i.Date
val a = convertStringToTimestamp(confirmedDate)
val confirmedCountOnDate = i.Confirmed
val confirmedWorldEntry = Entry(a!!.toFloat(), confirmedCountOnDate.toFloat())
confirmedValues.add(confirmedWorldEntry)
}
val confirmeddataSet = LineDataSet(confirmedValues as List<Entry>?, "Confirmed Cases")
viewModelScope.launch {
showChartonUI(confirmeddataSet)
}
}
}
private suspend fun showChartonUI(
confirmedData: LineDataSet,
) {
withContext(Dispatchers.IO){
confirmedLiveData.postValue(confirmedData)
}
}