MPAndroidChart:未调用PieChart onValueSelected

问题描述 投票:2回答:2

我在PieChart上有问题。每当调用Activity时,我都会更新图表,并使用以下方法进行此操作:

private void setupPieChart() {
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
    mChart.setLayoutParams(params);

    mChart.setUsePercentValues(true);

    /**
     * Hide the Description and the Legend.
     */
    mChart.setDescription("");
    mChart.getLegend().setEnabled(false);

    /**
     * Hole in the middle.
     */
    mChart.setDrawHoleEnabled(true);
    mChart.setHoleRadius(50);
    mChart.setTransparentCircleRadius(55);

    mChart.setRotationAngle(0);
    mChart.setRotationEnabled(true);

    mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
        @Override
        public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
            switch (e.getXIndex()) {
                case 0:
                    startLearning(e.getXIndex());
                    break;
                case 1:
                    startLearning(e.getXIndex());
                    break;
                case 2:
                    startLearning(e.getXIndex());
                    break;
                case 3:
                    startLearning(e.getXIndex());
                    break;
                case 4:
                    startLearning(e.getXIndex());
                    break;
                default:
                    break;
            }
        }

        @Override
        public void onNothingSelected() {
            System.out.println("onNothingSelected");
        }
    });

    addDataForPieChart();
}

而且我要添加数据:

private void addDataForPieChart() {
    /**
     * Data of the Chart.
     */
    float[] value = mCurrentLearnSet.getCountFromLevel();
    String[] names = {"First Level", "Second Level", "Third Level", "Forth Level", "Fifth Level"};

    /**
     * Create needed Entries.
     */
    List<Entry> entries = new ArrayList<>();
    List<String> strings = new ArrayList<>();
    for (int i = 0; i < value.length; i++) {
        if (value[i] != 0) {
            entries.add(new Entry(value[i], i));
            strings.add(names[i]);
        }
    }

    /**
     * Create pie data set.
     */
    PieDataSet dataSet = new PieDataSet(entries, "Your Progress");
    dataSet.setSliceSpace(3);
    dataSet.setSelectionShift(5);

    /**
     * Setup Colors.
     */
    dataSet.setColors(ColorTemplate.LIBERTY_COLORS);

    /**
     * Instantiate pie data object.
     */
    PieData data = new PieData(strings, dataSet);
    data.setValueFormatter(new PercentFormatter());
    data.setValueTextSize(13f);
    data.setValueTextColor(R.color.primary_text);

    /**
     * Set the Data to the PieChart.
     */
    mChart.setData(data);

    /**
     * Undo all highlights.
     */
    mChart.highlightValues(null);

    /**
     * Update pie chart.
     */
    mChart.notifyDataSetChanged();
    mChart.invalidate();
}

我的问题如下:

每次创建时,图表中的切片数量不同。 OnChartValueSelectedListener()有时会无法正常工作。切片正确显示,但是从未调用方法onValueSelected(),所以我无法单击它们。虽然没有错误或突出显示。仅调用onNothingSelected()

请咨询,我该怎么办?

android pie-chart mpandroidchart
2个回答
1
投票

问题是跟随的代码段中的条目缺少索引。由于我删除了if语句,因此代码可以再次正常工作。

/**
 * Create needed Entries.
 */
List<Entry> entries = new ArrayList<>();
List<String> strings = new ArrayList<>();
for (int i = 0; i < value.length; i++) {
    if (value[i] != 0) { // <--
        entries.add(new Entry(value[i], i));
        strings.add(names[i]);
    }
}

-1
投票

我认为您已经设置了mchart.data.setHighLightEnabled(false),请尝试将其设置为true,届时将调用onValueSelected()

© www.soinside.com 2019 - 2024. All rights reserved.