0

我正在 ViewPager 中实现 achartengine。保存图表的视图有一个带有 7 个选项的微调器,您可以在其中选择要查看的数据。其中 6 个选项返回 PieChartView,最后一个选项返回 TimeChartView。

piechartView图表按预期更新和重绘,但选择TimeChartView选项时,没有任何反应。该视图与先前选择的 PieChartView 保持一致,并且不会引发错误。我已经在应用程序的其他地方成功实现了 TimeChartView,并且比较代码和提供图表的数据没有引发任何标志,所以我只能假设我切换图表类型的方法不正确。

下面的代码摘录是处理切换视图的部分;任何意见,将不胜感激。

try{
        //if mChartView is already created (has data)
        //we need to invalidate it because it will only accept
        //data less than or equal to the length of data it currently has
        if(mChartView != null){
            mChartView.invalidate();
        }
        if(graphType >= 6){
            mChartView = ChartFactory.getTimeChartView(ctx, mDataset, genericXYRenderer, "MM/dd");
            genericXYRenderer.setClickEnabled(false);
        }else{
            mChartView = ChartFactory.getPieChartView(ctx, genericSeries, genericRenderer);
      genericRenderer.setClickEnabled(false);
      genericRenderer.setSelectableBuffer(10);
        }


      layout.addView(mChartView, new LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
     mChartView.repaint();
    } catch (Exception e) {
        Log.e("[appname]", "Error trying to set ChartView", e);
        m_Logger = new Logger();
    m_Logger.error(e);
}

非常感谢,戴夫

4

1 回答 1

0

行。因此 PieCharts 正在更新,因为 mChart 视图包含对 PieChartView 的引用,并且微调器选项为其提供了相同格式的数组数据(尽管大小不同)。

打电话

mChartView.invalidate();

(我猜)刚刚清除了它持有的数据,但仍然保留了对 PieChartView 的引用。选择TimeChartView选项时,阵列数据以不同的格式与PieChartView不兼容。不知道为什么它没有抛出错误。

无论如何,解决方案是将 .invalidate() 调用替换为:

layout.removeView(mChartView);
于 2012-05-01T20:13:51.890 回答