-1
我有一個應用程序包含一些圖形使用AChartEngine庫,它自動更新後,用戶從服務器上下載一些新的數據。該圖只包含一個固定數量的點,每次下載後,我將新的數據添加到圖中並刪除最舊的保留顯示數據的數量,然後我調用重繪函數。但重繪不起作用,因爲舊數據繼續在圖上顯示,只有當我重新啓動應用程序,他們消失。這是實現Graph小部件的代碼AchartEngine重繪奇怪的行爲
public class LineGraph {
Context context;
GraphicalView graphicalView = null;
TimeSeries tempSeries = null;
TimeSeries humSeries = null;
XYMultipleSeriesDataset dataset = null;
XYSeriesRenderer rendererTemp = null;
XYSeriesRenderer rendererHum = null;
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
public LineGraph(Context context) {
this.context = context;
}
// build empty graph
public View buildGraph(Fragment f) {
dataset = new XYMultipleSeriesDataset();
// set properties
if (f.getClass().equals(TempFragment.class)
|| f.getClass().equals(MixFragment.class)) {
tempSeries = new TimeSeries("");
dataset.addSeries(tempSeries);
rendererTemp = new XYSeriesRenderer();
rendererTemp.setPointStyle(PointStyle.CIRCLE);
rendererTemp.setLineWidth(2);
rendererTemp.setColor(Color.RED);
}
if (f.getClass().equals(HumFragment.class)
|| f.getClass().equals(MixFragment.class)) {
humSeries = new TimeSeries("");
dataset.addSeries(humSeries);
rendererHum = new XYSeriesRenderer();
rendererHum.setPointStyle(PointStyle.CIRCLE);
rendererHum.setLineWidth(2);
rendererHum.setColor(Color.BLUE);
}
XYMultipleSeriesRenderer multipleRenderer = new XYMultipleSeriesRenderer();
multipleRenderer.setYAxisMin(15);
multipleRenderer.setYAxisMax(80);
if (tempSeries != null) {
multipleRenderer.addSeriesRenderer(rendererTemp);
}
if (humSeries != null) {
multipleRenderer.addSeriesRenderer(rendererHum);
}
multipleRenderer.setShowGrid(true);
multipleRenderer.setPointSize(8);
multipleRenderer.setClickEnabled(true);
multipleRenderer.setShowLegend(false);
multipleRenderer.setShowLabels(true);
multipleRenderer.setLabelsTextSize(20);
multipleRenderer.setXRoundedLabels(false);
// create view
if (graphicalView == null) {
graphicalView = ChartFactory.getTimeChartView(context, dataset,
multipleRenderer, "");
graphicalView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
SeriesSelection seriesSelection = graphicalView
.getCurrentSeriesAndPoint();
if (seriesSelection != null) {
Toast.makeText(
context,
"Data "
+ dateFormat.format(seriesSelection
.getXValue())
+ " Valore rilevato: "
+ seriesSelection.getValue(),
Toast.LENGTH_LONG).show();
}
}
});
}
return graphicalView;
}
/*
* refresh graph with new data
*/
@SuppressLint("SimpleDateFormat")
public void refresh(ArrayList<String[]> list, int to_remove) {
try {
if (tempSeries != null) {
for (int i = 0; i < list.size(); i++) {
tempSeries.add(dateFormat.parse(list.get(i)[2]),
Double.valueOf(list.get(i)[0]));
}
if (to_remove > 0) {
for (int i = 0; i < to_remove; i++) {
tempSeries.remove(i);
}
}
}
if (humSeries != null) {
for (int i = 0; i < list.size(); i++) {
double to_add = Double.valueOf(list.get(i)[1]);
humSeries.add(dateFormat.parse(list.get(i)[2]), to_add);
}
if(to_remove>0) {
for (int i = 0; i < to_remove; i++) {
humSeries.remove(i);
}
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
graphicalView.repaint();
}
}
出了什麼問題?