¿Hay una manera de obtener referencias para todos los fragmentos actualmente activos en una actividad?

No he encontrado una forma sencilla de obtener todos los fragmentos actualmente activos (visible, actualmente en estado reanudado) en una actividad. ¿Es posible sin contabilidad personalizada en mi Actividad? Parece que el FragmentManager no admite esta característica.

Parece que la API pierde actualmente un método como "getFragments".
Sin embargo, utilizando el evento "onAttachFragment" de la clase Actividad debe ser bastante fácil de hacer lo que quieras. Yo haría algo como:

List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>(); @Override public void onAttachFragment (Fragment fragment) { fragList.add(new WeakReference(fragment)); } public List<Fragment> getActiveFragments() { ArrayList<Fragment> ret = new ArrayList<Fragment>(); for(WeakReference<Fragment> ref : fragList) { Fragment f = ref.get(); if(f != null) { if(f.isVisible()) { ret.add(f); } } } return ret; } 

En caso de que no haya un método listo para leer el estado desde el objeto (isActive () en el ejemplo), anularía onResume y onPause para establecer un flag (podría ser sólo un campo bool).
Eso ya es algo propio de la contabilidad, pero todavía muy limitado en mi opinión teniendo en cuenta el objetivo muy específico que desea lograr (estado dependiente de la lista).

Si utiliza la Biblioteca de soporte técnico de Android, puede llamar al método FragmentManager.getFragments() oculto:

 public List<Fragment> getVisibleFragments() { List<Fragment> allFragments = getSupportFragmentManager().getFragments(); if (allFragments == null || allFragments.isEmpty()) { return Collections.emptyList(); } List<Fragment> visibleFragments = new ArrayList<Fragment>(); for (Fragment fragment : allFragments) { if (fragment.isVisible()) { visibleFragments.add(fragment); } } return visibleFragments; } 

Otra manera de hacer esto sería poner etiquetas en tus fragmentos cuando los agregas a la actividad.

Por ejemplo, si agrega dinámicamente 4 fragmentos, puede agregarlos como:

 for (int i = 0; i < NUM_FRAGMENTS; i++){ MyFragment fragment = new Fragment(i); fragmentTransaction.add(R.id.containerId, fragment, SOME_CUSTOM_PREFIX + i).commit() } 

Luego, si necesita recuperar todos los fragmentos más tarde, puede hacer lo siguiente:

 for (int i = 0; i < NUM_FRAGMENTS; i++) { String tag = SOME_CUSTOM_PREFIX + i; fragmentList.add((MyFragment) fragmentManager.findFragmentByTag(tag)); } 

Resolví con esto:

 public ArrayList<Fragment> getAllFragments() { ArrayList<Fragment> lista = new ArrayList<Fragment>(); for (Fragment fragment : getSupportFragmentManager().getFragments()) { try { fragment.getTag(); lista.add(fragment); } catch (NullPointerException e) { } } return lista; } 

android.support.v4.app.FragmentManager tiene un método llamado getFragments() que hace exactamente lo que necesita, pero nunca fue accesible. De repente, sin embargo, lo es, pero no estoy seguro si eso está previsto porque todavía está marcado como oculto.

 /** * Get a list of all fragments that have been added to the fragment manager. * * @return The list of all fragments or null if none. * @hide */ public abstract List<Fragment> getFragments(); 

El FragmentManager regular no tiene este método en absoluto, pero si realmente se necesita, puede acceder al mismo objeto obteniendo el campo mActive través de la reflexión. Uso a riesgo propio 🙂

  • ViewPager en blanco en la parte posterior de otro fragmento
  • Una actividad - muchos fragmentos O muchas actividades - muchos fragmentos?
  • Fragmento en ViewPager utilizando FragmentPagerAdapter está en blanco la segunda vez que se ve
  • Objetos de comunicación entre fragmentos múltiples en ViewPager
  • Los fragmentos de Viewpager de Android se actualizan al pasar
  • ¿Por qué no se llama a mis fragmentos onSaveInstanceState ()?
  • Cómo implementar onBackPressed () en Fragmentos?
  • Extraño error utilizando onCreateView en PreferenceFragment al llamar addPreferencesFromResource de onCreate
  • Añadir acción de botón en la notificación personalizada
  • ¿Cómo hacer el FAB evitar ser movido en ViewPager, sin embargo, ser una parte del fragmento dentro?
  • ¿Cómo pasar argumentos de fragmentos mientras se utiliza un paginador de vista con diferentes fragmentos / layouts?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.