PhilJay / MPAndroidChart Chart Chart зависает в пользовательском интерфейсе - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь построить данные о 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)

    }

}
...