Estoy usando un Viewpager
con un FragmentPagerAdapter
para permitir la adición y eliminación de páginas. Cada página muestra datos obtenidos de internet.Viewpager y FragmentPagerAdapter: eliminación de vista de página
Cuando se agrega una nueva página, se asocia un nuevo Fragmento a esa página. Los datos se obtienen a través de AsyncTask y se muestran en el Fragmento. Cuando el usuario elige eliminar una página, la idea es destruir la página y el Fragmento asociado.
En general, todo esto funciona bien. El problema que estoy viendo es la siguiente:
tiene tres páginas con los datos:
[Página 1] [Página 2] [Página 3]
elimina cualquier página que no sea la última, diga la página 2; Page 2 desaparece como se desee:
[Página 1] [Página 3]
Se agrega una nueva página; pero en lugar de una nueva página en blanco, la nueva página muestra los datos (vista) desde la página 3.
[Página 1] [Página 3] [Página 4, pero mostrando la vista/datos de la página 3, debe ser en blanco]
el código de eliminación de páginas en mi actividad es el siguiente:
// Destroy fragment for this page
DataListFragment curFrag = getFragmentByName(currentPage);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(curFrag).commit();
fm.executePendingTransactions();
curFrag = null;
// Remove page and update adapter
mPageTitles.remove(position);
mAdapter.notifyDataSetChanged();
Usando el depurador, se muestra que el fragmento se elimina de la FragmentManager
después de la llamada executePendingTransactions()
. Pero en la llamada FrampePagerAdapters
, mAdapter.notifyDataSetChanged()
, el fragmento se agrega de nuevo y luego se muestra cuando se crea una página nueva.
Intenté usar el FrameStatePagerAdapter, ya que eso debería permitir destruir fragmentos, pero no funcionó. En el método getItemPosition()
de mi FragmentPagerAdapter, uso return FragmentAdapter.POSITION_NONE;
como se señala en otro artículo SO que encontré.
Parece que la Vista de esa página no se destruye, sino que se vuelve a agregar a la nueva página. Intenté usar el método removeViewAt()
en la vista de la página nueva, pero eso no funcionó.
ser nuevo en esto, estoy seguro de que me falta algo obvio ...
no estoy seguro de que es algo obvio. Me estoy encontrando con este problema también. ¿Lo resolviste? Puede haber una respuesta aquí: http://stackoverflow.com/questions/12510404/reorder-pages-in-fragmentstatepageradapter-using-getitempositionobject-object –
¿Puede mostrarnos su método invalidado? Public Fragment getItem (int position) – Gomino
Cuándo está eliminando un fragmento, no lo elimina del adaptador. Es por eso que aparece de nuevo. Debe eliminarlo de su adaptador (no de la vista, sino del artículo, que utiliza en el método getItem()). el 4to fragmento se ve como el tercero porque reutiliza el fragmento, como el adaptador de ListView. Usted tiene un error en la lógica del adaptador. Muestra tu clase de adaptador –