2014-01-22 3 views
0

У меня есть фрагмент Android с линейной диаграммой Achartengine (скопирован из официального примера из achartengine). Моя активность показывает один фрагмент за раз и использует меню для переключения между этими фрагментами. Отображение ChartFragment в первый раз отлично работает, но когда я переключаюсь на другой фрагмент и затем переключаюсь обратно на свой ChartFragment, диаграмма исчезла.Фрагмент Android с использованием Achartengine - Диаграмма исчезает после переключения фрагментов

public class MainActivity { 

    // ... 

    public void replaceFragment(int position) { 
     FragmentTransaction fragTransaction = mFragmentManager 
       .beginTransaction(); 
     fragTransaction.replace(R.id.fragment_container, 
       fragments.valueAt(position)); 
     fragTransaction.commit(); 
    } 

    // ... 
} 

public class ChartFragment extends Fragment { 

    // ... 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     View view = this.getView(); 

     if (mChartView == null) { 
      LinearLayout layout = (LinearLayout) view.findViewById(R.id.chart); 
      mChartView = ChartFactory.getLineChartView(this, mDataset, 
        mRenderer); 
      layout.addView(mChartView, new LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     } else { 
        mChartView.repaint(); 
     } 
    }  

    // ... 
} 

Первый вызов onResume() работает отлично и график создается и отображается. Если снова вызывается onResume(), диаграмма исчезает. Вызов repaint() не помогает (mChartView не является нулевым). Как я могу отобразить диаграмму после перехода к этому фрагменту?

Заранее благодарен!

ответ

0

Используйте это вместо ур replaceFragment()

public void replaceFragment(int position) { 
    FragmentTransaction fragTransaction = mFragmentManager 
      .beginTransaction(); 
    fragTransaction.replace(R.id.frame, fragments.get(position)); 
    fragTransaction.addToBackStack(null).commit(); 
} 

и onresume()

public void onResume() 
    { 
     super.onResume(); 
     System.out.println("onResume called"); 
     View view = this.getView(); 
     if(mChartView == null) 
     { 
      LinearLayout layout = (LinearLayout) view.findViewById(R.id.chart); 
      mChartView = ChartFactory.getLineChartView(getActivity(), mDataset, mRenderer); 
      layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     } 
     else 
     { 
      mChartView.repaint(); 
     } 
    } 
Смежные вопросы