如果数据改变值,安卓饼图不会刷新饼图。

问题描述 投票:0回答:1

我不能从我的监听器Spinner刷新我的饼图:在Fragment里面设置OnItemSelectedListener。

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)返回一个数组。方法calculateCredits(teamSelected, creditsByRoles)返回一个Integer数组。

当Spinner改变值时,饼图没有改变值。

有什么解决办法吗?

java android android-studio pie-chart
1个回答
0
投票

如果你想刷新图表,你必须使用这一行。

pie.invalidate();

在调用 invalidate() 该图是 焕然一新 并对提供的数据进行绘制。docs。


0
投票

我已经用这种方式解决了。

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);
© www.soinside.com 2019 - 2024. All rights reserved.