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

Ok。したがって、mChart ビューは PieChartView への参照を保持し、スピナー オプションは (サイズは異なりますが) 同じ形式で配列データを提供していたため、PieCharts は更新されていました。

通話中

mChartView.invalidate();

(私は推測しています) 保持しているデータを消去しましたが、PieChartView への参照は保持していました。TimeChartView オプションが選択された場合、配列データは PieChartView と互換性のない別の形式でした。エラーが発生しなかった理由がわかりません。

とにかく、解決策は .invalidate() 呼び出しを次のように置き換えることでした:

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