2012-04-26 8 views
0

私はViewPager内でachartengineを実装しています。チャートを保持するビューには、表示するデータを選択できる7つのオプションがあるスピンナがあります。 6つのオプションはPieChartViewを返し、最後のオプションはTimeChartViewを返します。achartengine switch chart type in view

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

[OK]をクリックします。したがって、PieChartsは、mChartビューがPieChartViewへの参照を保持し、スピナーオプションが同じフォーマット(異なるサイズでも)の配列データを提供していたために更新されていました。

呼び出す

mChartView.invalidate(); 

ちょうどそれが保持されているデータをクリアし、それでもPieChartViewへの参照を保持(私は推測しています)。 TimeChartViewオプションを選択した場合、配列データはPieChartViewと互換性のない別の形式になっていました。なぜそれがエラーを投げなかったのか分かりません。

layout.removeView(mChartView); 

とにかく、解決策を持つ.invalidate()の呼び出しを置き換えることでした