2012-04-26 2 views
0

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); 
} 

많은 감사, 데이브

답변

0

좋아. 따라서 PieCharts는 mChart 뷰가 PieChartView에 대한 참조를 보유하고 있고 스피너 옵션이 동일한 형식 (다른 크기 임에도 불구하고)으로 배열 데이터를 제공했기 때문에 PieChart가 업데이트 중입니다.

호출

mChartView.invalidate(); 

그냥있는 데이터를 삭제,하지만 여전히 PieChartView에 대한 참조를 유지 (내가 추측하고있어). TimeChartView 옵션을 선택하면 배열 데이터가 PieChartView와 호환되지 않는 다른 형식으로 나타납니다. 왜 그것이 오류를 던지지 않았는지 확실하지 않습니다.

layout.removeView(mChartView); 
:

어쨌든,이 솔루션은 함께 .invalidate() 호출을 대체하는 것이 었습니다