тип диаграммы переключателя achartengine в представлении

Я реализую achartengine в ViewPager. Представление, содержащее диаграмму, имеет счетчик с 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);
}

Большое спасибо, Дэйв


person DaveSav    schedule 26.04.2012    source источник


Ответы (1)


Ok. Таким образом, круговые диаграммы обновлялись, потому что представление mChart содержало ссылку на PieChartView, а параметры счетчика предоставляли ему данные массива в том же формате (хотя и разных размеров).

Вызов

mChartView.invalidate();

(я предполагаю) просто очистил данные, которые он содержал, но все же сохранил ссылку на PieChartView. Когда был выбран параметр TimeChartView, данные массива были в другом формате, несовместимом с PieChartView. Не уверен, почему он не выдал ошибку.

В любом случае, решение состояло в том, чтобы заменить вызов .invalidate() на:

layout.removeView(mChartView);
person DaveSav    schedule 01.05.2012