0
내 안드로이드 애플 리케이션에서 achartengine libraray를 사용하여 원형 차트를 그립니다. 버튼을 클릭하면 차트가 팝업 창에 표시됩니다. 차트 데이터가 sqlite 데이터베이스에서 검색 중입니다. 여기 내 코드가있다.중복 원형 차트 데이터
btnpieChart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (distributionSeries != null || defaultRenderer != null) {
distributionSeries.clear();
defaultRenderer.removeSeriesRenderer(seriesRenderer);
}
SelectDBAdapter selectDBAdapter = SelectDBAdapter
.getDBAdapterInstance(getActivity());
try {
selectDBAdapter.openDataBase();
chartDataMap = selectDBAdapter
.getPieChartData(strBusinessUnit,
currentPeriod, currentYear);
} catch (Exception e) {
selectDBAdapter.close();
e.printStackTrace();
} finally {
selectDBAdapter.close();
}
System.out.println("chartDataMap === "+ chartDataMap);
if (chartDataMap.size() > 0) {
for (Map.Entry<String, Double> entry : chartDataMap.entrySet()) {
lstBrandNames.add(entry.getKey());
lstAchievedVals.add(entry.getValue());
}
ArrayList<Double> distribution = calc_Percentage(lstAchievedVals);
System.out.println("distribution === " + distribution);
lstBrandNames = set_lables(lstBrandNames, distribution);
distributionSeries = new CategorySeries(
"Brands - Achievement Progress");
for (int i = 0; i < distribution.size(); i++) {
distributionSeries.add(lstBrandNames.get(i), distribution.get(i));
}
defaultRenderer = new DefaultRenderer();
defaultRenderer.setApplyBackgroundColor(true);
defaultRenderer.setBackgroundColor(Color.WHITE);
defaultRenderer.setLabelsTextSize(25);
//defaultRenderer.setPanEnabled(true, false);
for (int i = 0; i < distribution.size(); i++) {
seriesRenderer = new SimpleSeriesRenderer();
Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
seriesRenderer.setColor(color);
seriesRenderer.setGradientEnabled(false);
seriesRenderer.setDisplayChartValues(true);
seriesRenderer.setShowLegendItem(false);
defaultRenderer.addSeriesRenderer(seriesRenderer);
}
defaultRenderer.setLabelsColor(Color.BLACK);
defaultRenderer.setChartTitle("Brands - Achievement Progress");
defaultRenderer.setChartTitleTextSize(30);
defaultRenderer.setZoomButtonsVisible(true);
defaultRenderer.setShowLabels(true);
mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer);
View popupView = inflater.inflate(R.layout.pie_chart, null);
PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
LinearLayout layout = (LinearLayout) popupView.findViewById(R.id.chart_container);
layout.removeAllViews();
layout.addView(mChartView);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.showAsDropDown(popupView, 50, 50);
}
}
});
버튼을 다시 클릭하면 다시 차트 데이터가 원형 차트 데이터로 복제됩니다.
파이 차트에서 돌아 왔을 때 distributionSeries 및 defaultRenderer가 제대로 지워지지 않았다고 생각합니다. 그리고 또한. 내가 차트 창에서 돌아올 때 logcat says :
11-26 05:15:33.163: W/InputEventReceiver(1431): Attempted to finish an input event but the input event receiver has already been disposed.
누구든지이 문제를 해결하는 데 도움을 줄 수 있습니까?