【问题标题】:Android : Issue in creating pie chart in a fragmentAndroid:在片段中创建饼图的问题
【发布时间】:2013-11-25 04:26:53
【问题描述】:

在我的 Android 应用程序中,我正在使用 achartengine 库创建一个饼图。当单击一个按钮时,它会从 sqlite 数据库中获取数据并绘制一个饼图。这是我的代码段。

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);

我在一个片段中做所有这些事情。我发现在片段中创建新布局并不是一件好事。而且当我使用上述解决方案时,它会创建一次饼图,并且无法从饼图屏幕返回。

我很困惑如何解决这个问题。如果有人能如此友好地解释这里发生了什么以及我该如何解决这个问题,我将不胜感激。

非常感谢

【问题讨论】:

  • @SweetWisher 你能用一些代码段解释一下吗?

标签: java android fragment pie-chart


【解决方案1】:

替换片段:

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

如果你想回到之前的fragmnet,确保你将上面的事务添加到back stack,即

ft.addToBackStack(null);

【讨论】:

  • 那么我应该如何将饼图添加到新创建的片段中?
  • 你创建饼图的代码会在 Fragment 的 OnCreateView 上
  • 以前我正在使用这个创建饼图。**Intent intent = ChartFactory.getPieChartIntent(getActivity(), distributionSeries, defaultRenderer, "Dash Board"); getActivity().startActivity(intent);** 可以用吗?
  • 。使用片段 U 不能使用 startActivity.. 然后它将只创建新布局..
  • 那么我应该如何在新片段中创建饼图?请帮我澄清一下。\
猜你喜欢
  • 2021-07-17
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多