java - 安卓 : Issue in creating pie chart in a fragment

标签 java android fragment pie-chart

在我的 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);

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

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

非常感谢

最佳答案

替换 fragment :

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

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

ft.addToBackStack(null);

关于java - 安卓 : Issue in creating pie chart in a fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184748/

相关文章:

java - 如何让单个线程而不是整个程序等待?

Java 检查一个字符串是有效的 JSON 还是有效的 XML 或者两者都不是

Android imageview 从缩放图像中获取像素颜色

带有许多 fragment 的 Android 抽屉导航

java - 类不读取数组

java - bundle 中 Unresolved 约束-osgi.wiring.package=com.mashape.unirest.http (版本>=2.0.0)(!(版本>=3.0.0))

java - 如何通过 Volley 将旋转器数据发送到数据库

android - 自定义可扩展的 BaseExpandableListAdapter getGroupView 或 getChildView 永远不会被调用

android - 如何在 fragment 类中声明按钮?

android - onActivityResult 未在 fragment android 中调用