2017-06-14 162 views
-1

你好,這是我的代碼,但不能工作(的library最新版本)如何刪除MPAndroidChart中的舊數據?

LineData dataChart = mainChart.getData(); 

    if (dataChart != null) { 

     LineDataSet set = (LineDataSet) dataChart.getDataSetByIndex(0); 
     if (set == null) { 
      set = (LineDataSet) createSet(ColorTemplate.rgb(colorChart), ColorTemplate.rgb(colorFill)); 
      dataChart.addDataSet(set); 
     } 



     dataChart.addEntry(new Entry(set.getEntryCount(), sensorEvent.values[2]), 0); 
     dataChart.notifyDataChanged(); 

     if(set.getEntryCount() == 20) { 
      set.removeFirst(); 
     } 

     // let the chart know it's data has changed 
     mainChart.notifyDataSetChanged(); 
     // limit the number of visible entries 
     mainChart.setVisibleXRangeMaximum(20); 
     mainChart.moveViewToX(dataChart.getEntryCount()); 

    } 

`這個鱈魚的產量: not correct

但是當我常我的代碼:

LineData dataChart = mainChart.getData(); 

    if (dataChart != null) { 

     LineDataSet set = (LineDataSet) dataChart.getDataSetByIndex(0); 
     if (set == null) { 
      set = (LineDataSet) createSet(ColorTemplate.rgb(colorChart), ColorTemplate.rgb(colorFill)); 
      dataChart.addDataSet(set); 
     } 



     dataChart.addEntry(new Entry(set.getEntryCount(), sensorEvent.values[2]), 0); 
     dataChart.notifyDataChanged(); 

     // let the chart know it's data has changed 
     mainChart.notifyDataSetChanged(); 
     // limit the number of visible entries 
     mainChart.setVisibleXRangeMaximum(300); 
     mainChart.moveViewToX(dataChart.getEntryCount()); 

    } 

和輸出是正確的,那麼我應該怎麼做才能從圖表中刪除舊數據? correct but I want delet old data

+0

pieChart.invalidate();試試這個作爲第一行 – ashish

+0

這是線圖不是piechart.I添加set.invalidate後removeFirst但不能再工作。請幫助我。 – Saeed

回答

0

問題解決了。 我應該加上這幾行。

if(set.getEntryCount() == MAX_ENTRIES) { 
      set.removeFirst(); 
      // change Indexes - move to beginning by 1 
      for (Entry entry : set.getValues()) 
       entry.setX(entry.getX() - 1); 
} 
0

我也有過這樣的疑難問題想展示其應用於LineChart最後5個條目,所以當數據正在添加時,我打電話addXValue()和addEntry的()。由於進入計數爲5,我打電話removeXValue(0)和removeEntry(0)刪除最舊的條目,但LineChart非常奇怪:實際上條目數是5,但最終只有一個條目,現在我不知道該如何處理它。這是我的代碼:

private static final int VISIBLE_NUM = 5; 

private void refreshData(float value) { 
    LineData data = mChart.getData(); 
    if (data != null) { 
     LineDataSet set = data.getDataSetByIndex(0); 

     if (set == null) { 

      set = new LineDataSet(null, "DataSet"); 
      set.enableDashedLine(10f, 5f, 0f); 
      set.setColor(Color.BLUE); 
      set.setCircleColor(Color.GREEN); 
      set.setLineWidth(1f); 
      set.setCircleSize(3f); 
      set.setDrawCircleHole(false); 
      set.setValueTextSize(9f); 
      set.setFillAlpha(65); 
      set.setFillColor(Color.BLACK); 

      data.addDataSet(set); 
     } 

     if(set.getEntryCount() == VISIBLE_NUM) { 
      data.removeXValue(0); 
      set.removeEntry(0); 
     } 

     data.addXValue(new SimpleDateFormat("HH:mm:ss") 
       .format(new Date(System.currentTimeMillis()))); 
     data.addEntry(new Entry(value, set.getEntryCount()), 0); 

     mChart.notifyDataSetChanged(); 
     //mChart.setVisibleXRange(VISIBLE_NUM-1); 
     //mChart.moveViewToX(data.getXValCount() - VISIBLE_NUM); 
     mChart.invalidate(); 
    } 

} 
+0

不,這種方法刪除圖表,我只想刪除一箇舊點。 – Saeed

+0

檢查我更新的答案。 –

+0

感謝您的回答,但我沒有方法removeXValue(),所以我該怎麼辦?是否正確,我們寫data.addEntry set.addEntry.I所以confused.and寫set.addEntry(new Entry(set.getEntryCount (),value)) – Saeed