2011-10-26 16 views
5

Estoy usando un ViewPager con un PagerFragmentAdapter personalizado que usa una lista interna para proporcionar fragmentos. Me gustaría agregar y eliminar fragmentos dinámicamente en los cambios de configuración.Agregar y eliminar fragmentos dinámicamente en ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

He tratado de llamar de nuevo la setAdapter pero obtener una IllegalStateException (Can not perform this action after onSaveInstanceState).

¿Cómo puedo lograr mi objetivo?

Respuesta

2

No necesita reiniciar su ServicePagerAdapter cada vez. Es suficiente para crearlo y configurarlo una vez en el método onCreate() de su Activity (o en el método onActivityCreated() de su Fragment) y luego simplemente puede llamar al método add() de su adaptador para agregarle nuevos elementos. Pero no olvide llamar al notifyDataSetChanged() después de cada adición al adaptador.

+0

Desafortunadamente no es tan fácil. FragmentPagerAdapter almacena en caché Fragmentos, debe crear un PagerAdapter personalizado o utilizar algunos trucos. – Matroska

+0

en su muestra de código usted menciona 'ServicePagerAdapter' - esta no es una clase de biblioteca, por lo que asumí que ya usa un adaptador personalizado. Entonces, sí, necesitas una implementación personalizada de la clase 'PagerAdapter'. En cuanto a su pregunta principal, creo que fue respondida. – HitOdessit

+2

No es suficiente llamar a notifyDataSetChanged() en el PagerAdapter si se han eliminado elementos. También debe sobrescribir el método getItemPosition del PagerAdapter. Devuelve POSITION_UNCHANGED si el elemento aún está allí, o POSITION_NONE si se ha eliminado. –

Cuestiones relacionadas