2013-11-25 47 views
1

在我的Android應用程序中,我使用achartengine庫創建餅圖。當點擊一個按鈕時,它會從sqlite數據庫獲取數據並繪製餅圖。這是我的代碼段。Android:在片段中創建餅圖的問題

btnpieChart.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        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); 

         CategorySeries distributionSeries = new CategorySeries(
           "Brands - Achievement Progress"); 
         for (int i = 0; i < distribution.size(); i++) { 
          distributionSeries.add(lstBrandNames.get(i), distribution.get(i)); 
         } 

         DefaultRenderer defaultRenderer = new DefaultRenderer(); 
         defaultRenderer.setApplyBackgroundColor(true); 
         defaultRenderer.setBackgroundColor(Color.WHITE); 

         for (int i = 0; i < distribution.size(); i++) { 
          SimpleSeriesRenderer 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.setLabelsTextSize(25); 

          defaultRenderer.addSeriesRenderer(seriesRenderer); 
         } 

         defaultRenderer.setLabelsColor(Color.BLACK); 
         defaultRenderer.setChartTitle("Brands - Achievement Progress"); 
         defaultRenderer.setChartTitleTextSize(30); 
         defaultRenderer.setZoomButtonsVisible(true); 
         defaultRenderer.setShowLabels(true); 

         Intent intent = ChartFactory.getPieChartIntent(
           getActivity(), distributionSeries, 
           defaultRenderer, "Dash Board"); 

         getActivity().startActivity(intent); 


        } 
       } 
      }); 

這創建了餅圖。但有一個問題。比方說,首先,我點擊按鈕,然後創建餅圖。然後我從餅圖屏幕返回並再次單擊該按鈕,然後複製餅圖數據。

我發現像這樣的解決方案。

layout = new LinearLayout(getActivity()); 
mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer); 
layout.removeAllViews(); 
layout.addView(mChartView); getActivity().setContentView(layout); 

我正在做一個片段中的所有這些東西。我發現在片段中創建新的佈局不是一件好事。而且,當我使用上述解決方案時,它會創建一次餅圖,無法從餅圖屏幕返回。

我很困惑我該如何解決這個問題。我會非常感謝,如果有人請這麼友好來解釋這裏發生了什麼,我該如何解決這個問題。

非常感謝

+0

替換片段 –

+0

@SweetWisher你能用一些代碼段來解釋嗎? – Rose18

+0

檢查答案 –

回答

1

更換片段:

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.details, new NewFragmentToReplace, "NewFragmentTag"); 
ft.commit(); 

,如果你想回到以前的fragmnet,確保您添加上述交易,以返回堆疊,即

ft.addToBackStack(null); 
+0

那麼我應該如何將餅圖添加到新創建的片段? – Rose18

+0

您代碼生成餅圖將片段 –

+0

以前我「M創建使用此餅圖的上OnCreateView的。**意圖意圖= ChartFactory.getPieChartIntent( \t \t \t \t \t \t \t \t \t getActivity(),distributionSeries, \t \t \t \t \t \t \t \t \t defaultRenderer, 「儀表板」); getActivity()。startActivity(intent); **我可以使用它嗎? – Rose18