ホーム>source

PieChartに問題があります。アクティビティが呼び出されるたびにチャートを更新していますが、これは次のようにしています:

<前>ウィズウィズ

そして私はデータを追加しています:

<前>ウィズウィズ

私の問題は次のとおりです:

グラフには、作成されるたびに異なる量のスライスがあります。時々、 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()
あなたの答え
  • 解決した方法 # 1

    問題は、次のコードセグメントでエントリのインデックスが欠落していたことです。 ifステートメントを削除したので、コードは再び正しく機能します。

    <前>ウィズウィズ

  • 解決した方法 # 2

    mchart.data.setHighLightEnabled(false)を設定したと思います。onValueSelected()が呼び出されるときに、これをtrueに設定してみてください

    /** * 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]); } }

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ redirect - HTMLページが読み込まれない(JavaScript)