Creé una nueva clase View
. Dentro de esa clase necesito tener acceso al FragmentManager
, pero no puedo entender cómo.FragmentManager del contexto
¿Puedo acceder al FragmentManager
desde un contexto?
CustomView extends LinearLayout
Creé una nueva clase View
. Dentro de esa clase necesito tener acceso al FragmentManager
, pero no puedo entender cómo.FragmentManager del contexto
¿Puedo acceder al FragmentManager
desde un contexto?
CustomView extends LinearLayout
Solo si el contexto dado extiende la actividad (Post-Honeycomb) o FragmentActivity (pre-honeycomb).
En ese caso, debe asegurarse al 100% de que se trata de una actividad que utiliza la reflexión o la prueba de captura.
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");
}
pensamiento me recomiendan por lo que una refactorización View
es en realidad significaba para mostrar cosas y no debe realmente modificar el estado de su aplicación, pero esa es mi opinión.
si está utilizando fragmentos de apoyo, es probable que realmente quiere:
try {
FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
Log.e(TAG, "Can't get fragment manager");
}
Esto es lo que funcionó para mí:
Context mContext;
...
//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();
(Por supuesto, usted tiene que en primer lugar inicializar mContext)
¿cuál es esta lógica de fundición, cómo hizo posible – blackHawk
Puede obtener acceso a un FragmentManager (o SupportFragmentManager) en una Aplicación, pero como otras respuestas sugieren, solo puede hacerlo a través de una instancia de Activity.
Sin embargo, puede tener acceso a una FragmentManager a través de una actividad sin necesidad de llamar directamente a cualquier Actividades utilizando 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);
}
...
Debido a que su objeto de contexto no siempre se puede lanzar directamente a la actividad, este es una forma más confiable de hacer esto:
@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
}
Un DialogFragment contiene la vista en cuestión. Básicamente tengo un DialogFragment que está dividido en secciones basadas en el botón actualmente seleccionado. Muestro la vista apropiada. Dividí cada sección visualizable en su propia vista. Hubiera usado un Fragmento, pero no puedo insertar un fragmento dentro de un fragmento. – Steve
Voy a encontrar la vista por ID y paso una referencia a la Actividad. – Steve
¿Por qué no hacer que el DialogFragment controle el intercambio de vistas? Parece que sería tan complicado como lo que estás tratando de hacer. – DeeV