2013-11-26 3 views
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. 

누구든지이 문제를 해결하는 데 도움을 줄 수 있습니까?

답변

0

시리즈의 항목을 삭제하는 것처럼 보이지만 데이터 중복을 초래하는 lstBrandNames에 대해 동일한 작업을 수행하지 않은 것처럼 보입니다.