2016-06-02 2 views
2

PieChart에 문제가 있습니다. 내가 차트를 액티비티가 호출 될 때마다 업데이트하고 내가 함께이 일을 해요 :MPAndroidChart : PieChart onValueSelected가 호출되지 않았습니다.

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()이 호출됩니다.

제발, 어떻게해야합니까?

답변

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

들으, – ant45de

+0

다행 내가 도울 수 찾고 있었다 – Hnig

+0

예 내가 너무 너무 생각 같은 일 – ant45de

관련 문제