Refrescar vista de fragmentos mientras utiliza FragmentStatePagerAdapter
Parece que el problema de actualización se discute antes, pero ninguna de las soluciones funcionó para mí.
Lo que estoy tratando de hacer: Estoy utilizando FragmentStatePagerAdapter. Cada posición del adaptador contiene un fragmento que tiene un diseño lineal que tiene aspecto de ajedrez, con cada celda representada por un CheckedTextView.
- FragmentStatePageAdapter: Múltiples elementos visibles al mismo tiempo - ¿Cómo centrar una página específica?
- Diferencia entre FragmentPagerAdapter y FragmentStatePagerAdapter
- GetResources de FragmentStatePagerAdapter
- Android FragmentStatePagerAdapter devuelve pantalla en blanco al recargar fragmentos de medio
- El fragmento ya no existe para la clave f0: index 1
Y un oyente que debe escuchar los clics y elimina la selección anterior en las celdas y hace la nueva selección.
Qué está funcionando: Cada fragmento se carga correctamente con todos los datos / estados por defecto (calculados mientras el fragmento se carga en una lista)
Cuando hago clic en una celda todos los estados de la lista de celdas guardadas se obtienen correctamente y puedo cambiar ver el cambio de estado en el código durante la depuración. Al mismo tiempo asigno un nuevo estado para el CheckedTextView que representa una celda. Esto se establece como:
CheckedTextView cellView = (CheckedTextView) GridRow.getChildAt(c); cellView.setSelected(false); cellView.setChecked(false); cellView.setTag(cellsChess.get(i).get(c));
El problema: aunque los valores se almacenan y asignan correctamente la vista no se puede actualizar los valores de las celdas de la vista no se actualizan.
Consejos que he probado que no funcionó: 1. Llame a adapter.notifyDataSetChanged: Puede ser llamado mientras se utiliza FragmentStatePagerAdapter sólo cuando hemos sobreescrito:
@Override public int getItemPosition(Object object){ return POSITION_NONE; }
2. Añadiendo métodos de Overriden para DestroyItem y también agregando los fragmentos a un mapa en getItem:
Esto no es apropiado ya que estoy trabajando con FragmentStatePagerAdapter, por lo que todo el propósito de usar este pagerAdapter se habrá ido.
3. Invocación invalidate: Esto es inapropiado para este escenario, necesito actualizar en tiempo real.
4. Método setTag () en instantiateItem (): No creo que esto sea apropiado en esta situación.
Hilos de referencia: Actualizar imágenes en FragmentStatePagerAdapter al reanudar la actividad
ViewPager PagerAdapter no actualizar la vista
Actualizar ViewPager dinámicamente?
NotifyDataSetChanged no puede actualizar ListView
He tratado de exponer mi problema lo más claro posible, si alguien necesita más aclaraciones, pregunte.
Las respuestas urgentes serán muy apreciadas,
Aclamaciones
****Actualizar*****
Estoy utilizando el ViewPagerIndicator, en lugar del ViewPager predeterminado.
- Segundo conjunto de pestañas en un fragmento de Android
- Fragmentos que no se vuelven a crear por FragmentStatePagerAdapter después de volver a la instancia de Fragmento principal
- Android: intenta invocar el método virtual 'void android.support.v4.app.Fragment.setMenuVisibility (boolean)' en una referencia de objeto nulo
- Cambio de la imagen de fondo del fragmento actual en viewpager
- Cómo agregar la página dinámicamente en FragmentStatePagerAdapter
- "El niño especificado ya tiene un padre" error usando FragmentStatePagerAdapater
- Fragmento en ViewPager en Fragmento no se vuelve a cargar en el cambio de orientación
- Android - fragmento de niño no carga la segunda vez dentro de FragmentStatePagerAdapter
En relación con la función notifyDataSetChanged (), tengo dos experiencias diferentes.
Cuando utilicé mi subclase de ArrayAdapter para actualizar un ListView, funcionó directamente. Cuando llamé notifyDataSetChanged (), los elementos ListView se actualizan.
Sin embargo, cuando utilicé una subclase de FragmentStatePagerAdapter para actualizar un ViewPager, llamar a notifyDataSetChanged () no funcionó. NotifyDataSetChanged () es responsable de llamar a la función onChanged () de todos los DataSetObserver registrados, pero los observadores no se han registrado automáticamente como en ArrayAdapter. Tienes que hacer el trabajo de tierra por ti mismo.
Para mi sorpresa, DataSetObserver no es una interfaz sino una clase abstracta. Así que no podría simplemente implementarlo en mi subclase de fragmento. Tengo que definir una subclase de DataSetObserver, a continuación, definir un campo miembro en esta clase como una referencia a mi fragmento, y en la función overriden onChanged () actualizar su visualización Ver. El código es el siguiente:
public class DetailFragDataSetObserver extends DataSetObserver { private DetailTextFragment view_instance; protected static ArrayList<DetailFragDataSetObserver> list = new ArrayList<DetailFragDataSetObserver>(); public DetailFragDataSetObserver(DetailTextFragment f){ view_instance = f; list.add(this); } public DetailTextFragment getView(){ return view_instance; } public static DataSetObserver findDataSetObserverFor(DetailTextFragment f){ for ( int i = 0; i<list.size(); i++){ if ( list.get(i).getView() == f) return list.get(i); } return null; } public static void release(DataSetObserver observer){ list.remove(observer); ((DetailFragDataSetObserver)observer).view_instance = null; } @Override public void onChanged(){ assert null != view_instance; view_instance.vUpdateData(); } }
Tienes que tener cuidado. Debe recordar anular la referencia y anular el registro del objeto DataSetObserver en su fragmento de superposición.onDestroy (), de lo contrario el fragmento no se puede recolectar basura.
Más tarde, al examinar los códigos fuente, encontré ArrayAdapter y FragmentStatePagerAdapter y no son hermanos. Son totalmente diferentes. Ellos son en realidad de diferentes paquetes:
android.widget.ArrayAdapter android.support.v4.app.FragmentStatePagerAdapter
Es por eso que el primero funcionó fácilmente, mientras que el segundo no.
- ¿Cuál es el equivalente de Android de / dev / video0 para la cámara de la tableta?
- ¿Puede Android MediaCodec decodificar video stream h264?