Android P ie График не обновляется sh p ie график при изменении значения данных - PullRequest
0 голосов
/ 07 мая 2020

Я не могу обновить sh мою диаграмму p ie из моего слушателя Spinner: setOnItemSelectedListener внутри фрагмента.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

ArrayAdapter adapterSpinnerTeams = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, teamsName);
        adapterSpinnerTeams.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerTeamsAnalysis.setAdapter(adapterSpinnerTeams);

spinnerTeamsAnalysis.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                anyChartView2 = v.findViewById(R.id.anyChartView2);
                APIlib.getInstance().setActiveAnyChartView(anyChartView2);
                setUpPieChart(spinnerTeamsAnalysis.getSelectedItem().toString());
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                return;
            }

        });

  return v;
}

public void setUpPieChart(String teamSelected) {
        anyChartView2 = v.findViewById(R.id.anyChartView2);
        APIlib.getInstance().setActiveAnyChartView(anyChartView2);

        Pie pie = AnyChart.pie();
        List<DataEntry> dataEntries = new ArrayList<>();

        creditsByRoles = calculateCredits(teamSelected, creditsByRoles);

        for(int i=0; i<roles.length; i++) {
            dataEntries.add(new ValueDataEntry(roles[i], creditsByRoles[i]));
        }

        pie.data(dataEntries);

        pie.title("title");

        anyChartView2.setChart(pie);
}

NB. Метод calculateCredits (teamSelected, creditsByRoles) возвращает массив целых чисел.

При изменении значения счетчика диаграмма p ie не меняет значение.

Есть ли какое-нибудь решение?

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Я решил таким образом:

pieChart = v.findViewById(R.id.pieChart);
        APIlib.getInstance().setActiveAnyChartView(pieChart);

        final Pie pie = AnyChart.pie();
        List<DataEntry> dataEntries = new ArrayList<>();

        creditsByRoles = calculateCredits(teamSelected, creditsByRoles);

        for(int i=0; i<roles.length; i++) {
            dataEntries.add(new ValueDataEntry(roles[i], creditsByRoles[i]));
        }

        pie.data(dataEntries);

        pieChart.setChart(pie);

        /* Per permettere il refresh in caso di cambio valori */
        final int delayMillis = 500;
        final Handler handler = new Handler();
        final Runnable runnable = new Runnable() {
            public void run() {
                List<DataEntry> data = new ArrayList<>();
                for(int i=0; i<roles.length; i++) {
                    data.add(new ValueDataEntry(roles[i], creditsByRoles[i]));
                }
                pie.data(data);

                handler.postDelayed(this, delayMillis);
            }
        };
        handler.postDelayed(runnable, delayMillis);
0 голосов
/ 10 мая 2020

Если вы хотите обновить sh диаграмму, вы должны использовать эту строку:

pie.invalidate();

После вызова invalidate () диаграмма обновлена ​​ и предоставленные данные нарисованы. документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...