FragmentManager de contexto
Frecuentes
Visto 70,352 veces
5 Respuestas
61
Solo si el Contexto dado extiende la Actividad (Post-Honeycomb) o FragmentActivity (pre-honeycomb).
En cuyo caso, tendrías que asegurarte al 100 % de que se trata de una actividad que utiliza la reflexión o la captura de prueba.
try{
final Activity activity = (Activity) context;
// Return the fragment manager
return activity.getFragmentManager();
// If using the Support lib.
// return activity.getSupportFragmentManager();
} catch (ClassCastException e) {
Log.d(TAG, "Can't get the fragment manager with this");
}
Pensé que recomendaría refactorizar para que un View
en realidad solo está destinado a mostrar cosas y en realidad no debería modificar el estado de su aplicación, pero esa es mi opinión.
Respondido 17 ago 14, 05:08
48
si está utilizando fragmentos de soporte, probablemente desee:
try {
FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
Log.e(TAG, "Can't get fragment manager");
}
Respondido 23 Jul 14, 17:07
7
Esto es lo que funcionó para mí:
Context mContext;
...
//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();
(Por supuesto, primero debe inicializar mContext)
respondido 26 nov., 15:06
¿Qué es esta lógica de casting, cómo lo hizo posible? BlackHawk
3
Puede obtener acceso a un FragmentManager (o SupportFragmentManager) en una aplicación, pero como sugieren otras respuestas, solo puede hacerlo a través de una instancia de actividad.
Sin embargo, puede obtener acceso a FragmentManager a través de una actividad sin necesidad de llamar directamente a ninguna actividad mediante la interfaz ActivityLifecycleCallbacks:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
activity.getFragmentManager()
if(activity instanceof FragmentActivity) {
((FragmentActivity)activity).getSupportFragmentManager();
}
unregisterActivityLifecycleCallbacks(this);
}
...
respondido 28 mar '17, 15:03
2
Dado que su objeto de contexto no siempre se puede convertir directamente en Actividad, esta es una forma más confiable de hacerlo:
@Nullable
public static Activity getActivityFromContext(@NonNull Context context){
while (context instanceof ContextWrapper) {
if (context instanceof Activity) return (Activity) context;
context = ((ContextWrapper)context).getBaseContext();
}
return null; //we failed miserably
}
Respondido 21 Feb 18, 10:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android or haz tu propia pregunta.
Un DialogFragment contiene la vista en cuestión. Básicamente, tengo un DialogFragment que se divide en secciones según el botón seleccionado actualmente. Muestro la vista adecuada. Dividí cada sección visualizable en su propia vista. Habría usado un Fragmento, pero no puedo incrustar un fragmento dentro de un fragmento. - Steve
Voy a buscar la vista por id y pasar una referencia a la actividad. - Steve
¿Por qué no simplemente cambiar la vista del controlador DialogFragment? Parece que sería tan complicado como lo que estás tratando de hacer. - DeeV
Eso es lo que está haciendo. DialogFragment está intercambiando las vistas. Sin embargo, tengo las vistas que contienen algo de lógica y posiblemente muestran otros fragmentos de diálogo en respuesta a los eventos de uso, por lo que las vistas necesitan una forma de obtener el administrador de fragmentos. Sé que no se recomienda que las vistas contengan lógica... Simplemente no estoy seguro de cuál es la mejor manera de dividir las secciones. - Steve
@LeiLeyba: los fragmentos tienen métodos "getFragmentManager()" y "getChildFragmentManager()", por lo que no estoy seguro de lo que está preguntando. Sin embargo, esos (probablemente) devolverán un valor nulo si el Fragmento no está adjunto a una Actividad. También puede usar "getActivity().getFragmentManager()" para usar FragmentManager también. - DeeV