我正在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);
}
非常感谢, 戴夫
答案 0 :(得分:0)
确定。因此,PieCharts正在更新,因为mChart视图持有对PieChartView的引用,并且微调器选项以相同的格式(尽管大小不同)为它提供数组数据。
调用
mChartView.invalidate();
(我猜)刚刚清除了它所持有的数据,但仍然保留了对PieChartView的引用。选择TimeChartView选项后,阵列数据的格式与PieChartView不兼容。不知道为什么它没有抛出错误。
无论如何,解决方案是用:
替换.invalidate()调用layout.removeView(mChartView);