【问题标题】:Android Pie Chart doesn't refresh pie graph if data change value如果数据更改值,Android Pie Chart 不会刷新饼图
【发布时间】:2020-05-07 14:47:45
【问题描述】:

我无法从侦听器 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);
}

注意。方法 calculateCredits(teamSelected, creditsByRoles) 返回一个整数数组。

当微调器改变值时,饼图不会改变值。

有什么解决办法吗?

【问题讨论】:

标签: java android android-studio pie-chart


【解决方案1】:

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

pie.invalidate();

在调用 invalidate() 后,图表会刷新,并绘制提供的数据。 docs.

【讨论】:

    【解决方案2】:

    我是这样解决的:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多