FragmentPagerAdapter notifyDataSetChanged no funciona
Tengo un FragmentPagerAdapter. Es método getItem
puede devolver un fragmento de acuerdo a los datos que tiene desde el exterior. Después de actualizar los datos su supongo que para mostrar llamo notifyDataSetChanged
y nada sucedió. HICE getItemPosition
método getItemPosition
para devolver POSITION_NONE
:
public static class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { private final Context mContext; private final TabHost mTabHost; private final ViewPager mViewPager; private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); private PagerTabsFragments fragmentDisplayInfo = null; // for now only a // single size // back // stack static class PagerTabsFragments { public int tabPosition; public Fragment fragmentToDisplay; public Object fragmentInfo; public PagerTabsFragments(int tab, Fragment frag, Object info) { tabPosition = tab; fragmentToDisplay = frag; fragmentInfo = info; } } public void SetFragmentToDisplay(int tabPosition, Fragment frag, Object info) { fragmentDisplayInfo = new PagerTabsFragments(tabPosition, frag, info); notifyDataSetChanged(); } public void CancelFragmentToDisplay() { fragmentDisplayInfo = null; } ... @Override public Fragment getItem(final int position) { if ((fragmentDisplayInfo != null) && (fragmentDisplayInfo.tabPosition == position)) { return fragmentDisplayInfo.fragmentToDisplay; } final TabInfo info = mTabs.get(position); return Fragment.instantiate(mContext, info.clss.getName(), info.args); } @Override public int getItemPosition(Object item) { if (fragmentDisplayInfo == null) { return super.getItemPosition(item); } return POSITION_NONE; } ...
Y la actualización desde fuera está en un evento de clic que establece el fragmentDisplayInfo
var. Debuged y vi que el fragmentDisplayInfo
es de hecho inicializado y el método getItemPosition
devuelve POSITION_NONE
, pero el método getItem ni siquiera se llama. ¿Porqué es eso?
- NotifyDataSetChanged () no funciona con mi adaptador para gridview
- Emitir refrescando una vista de una fila en recyclerview
- NotifyDataSetChanged no puede actualizar ListView
- Error: No se puede resolver notifyDataSetChanged (); Androide
- ¿Quieres implementar notifyDataSetChanged o autorefresh a mi RecyclerView pero no funciona
- Adaptador de Android "java.lang.IndexOutOfBoundsException: Índice no válido 4, tamaño es 4"
- Android getChildView no se llama después de notifyDataSetChanged
- NotifyDataSetChanged- RecyclerView -¿Es una llamada asincrónica?
- Cómo actualizar algunos datos en un ListView sin utilizar notifyDataSetChanged ()?
- Android: detecta si un ListView tiene la barra de desplazamiento (después de configurar nuevos datos)
- Using notifyItemRemoved o notifyDataSetChanged con RecyclerView en Android
- Hace notificydatasetchanged llamada onCreateViewHolder al usar RecyclerView
- El adaptador de RecyclerView notifyDataSetChanged no funciona
No estoy seguro acerca de esto, pero puede intentar utilizar FragmentStatePagerAdapter
lugar de FragmentPagerAdapter
. La cosa es, yo también he encontrado este problema, y me ayudó
Lo que Nik Myers está diciendo es correcto. Sin embargo, falta una pieza. Cuando se llama notifyDataSetChanged, se llama al método getItemPosition. Debe anular esta opción para que los fragmentos se vuelvan a cargar.
@Override public int getItemPosition(Object object) { // Causes adapter to reload all Fragments when // notifyDataSetChanged is called return POSITION_NONE; }