Как сделать динамическое c обновление MP Android Чартов? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть диаграмма P ie, которая получает данные из Firebase Firestore, однако данные не принимаются немедленно, случается задержка более или менее на 2 секунды, и из-за этого на диаграмме не отображаются обновленные данные, как я могу сделать диаграмму для обновления, когда данные получены с успешным?

Это мой текущий код:


//Creation and fill data to PieChart
        PieChart pieChart = root.findViewById(R.id.barragrafico);
        PieDataSet pieDataSet = new PieDataSet(valoresGraf(),"");
        int[] colorsArray = new int[]{Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.DKGRAY, Color.RED, Color.BLACK};
        pieDataSet.setColors(colorsArray);
        PieData pieData = new PieData();
//        pieChart.setBackgroundColor(Color.WHITE);
        pieData.addDataSet(pieDataSet);
        pieData.setValueTextColor(Color.MAGENTA);
        pieChart.setEntryLabelColor(Color.WHITE);
        pieChart.setEntryLabelTypeface(Typeface.DEFAULT_BOLD);
        pieChart.getLegend().setTextColor(Color.WHITE);
        pieChart.getLegend().setTypeface(Typeface.DEFAULT_BOLD);
        pieChart.setEntryLabelTextSize(16f);
        pieChart.getDescription().setTextSize(13f);
        pieChart.getDescription().setTextColor(Color.WHITE);
        pieChart.getDescription().setTypeface(Typeface.DEFAULT_BOLD);
        pieChart.getDescription().setText("Dados Sincronizados\nOnline");
        pieChart.setData(pieData);

//Method that fill Piechart with ArrayList

    private ArrayList<PieEntry> valoresGraf(){
        ArrayList<PieEntry> valores = new ArrayList<PieEntry>();
        valores.add(0, new PieEntry(14, "Gado de corte"));
        valores.add(1, new PieEntry(Float.parseFloat(valorCard.get(1)), "Novilha")); // This valorCard is received from the firebase firecloud previously, delay 2-3 segs to updated in valorCard arraylist. 
        valores.add(2, new PieEntry(20, "Suino"));
        valores.add(3, new PieEntry(30, "Manejo"));
        valores.add(4, new PieEntry(40, "Terra"));
        valores.add(5, new PieEntry(50, "Extração"));
        valores.add(6, new PieEntry(80, "Desempenho"));
        return valores;
    }


Я пытаюсь использовать его:

pieData.notifyDataChanged();
pieChart.setDrawHoleEnabled(false);
pieChart.notifyDataSetChanged();
pieChart.invalidate();

После всех дополнений, но не сработало.

...