¿Fragmento de Android no se encontró ninguna vista para ID?

Resuelto coder_For_Life22 asked hace 54 años • 40 respuestas

Tengo un fragmento que intento agregar a una vista.

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
                                    .findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();

if (content == null || content.isRemoving()) {
    content=new feed_parser_activity(item.getLink().toString());
    xaction
        .add(R.id.feedContentContainer, content)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(null)
        .commit();
    Log.e("Abstract", "DONE");
}

Cuando se ejecuta este código, aparece el siguiente error en la depuración.

java.lang.IllegalArgumentException: No view found for id 0x7f080011 
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityes un Fragmento que está configurado con el diseño Fragmento en xml.
Estoy usando FragmentActivity para alojar el diseño de fragmento que contiene el archivo feed_parser_layout.
¿Estoy codificando esto correctamente arriba?

coder_For_Life22 avatar Jan 01 '70 08:01 coder_For_Life22
Aceptado

Yo también estaba teniendo este problema, hasta que me di cuenta de que había especificado el diseño incorrecto en setContentView()el onCreate()método de FragmentActivity.

La identificación pasada FragmentTransaction.add(), en su caso R.id.feedContentContainer, debe ser hija del diseño especificado en setContentView().

No nos mostró su onCreate()método, así que quizás este sea el mismo problema.

howettl avatar Nov 16 '2011 21:11 howettl

Este error también ocurre al tener Fragmentos anidados y agregarlos con getSupportFragmentManager() en lugar de getChildFragmentManager().

Malachiasz avatar Aug 09 '2013 12:08 Malachiasz

La solución fue utilizargetChildFragmentManager()

en lugar degetFragmentManager()

al llamar desde un fragmento. Si llama al método desde una actividad, utilice getFragmentManager().

Eso solucionará el problema.

Sterling Diaz avatar Feb 06 '2015 07:02 Sterling Diaz

Otro escenario que he encontrado implica el uso de fragmentos anidados, como un ViewPager dentro de un Fragmento, y sus páginas también son fragmentos.

Cuando realice una transacción de Fragmento en el fragmento interno (página de ViewPager), necesitará

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

getActivity() es la clave aquí.

Actualizado en 2023

Si se pregunta qué sucedió exactamente, puede seguir los pasos a continuación:

  1. Desde el menú de Android Studio, seleccioneBuild | Analyze apk
  2. Seleccione el archivo apk donde obtuvo el error
  3. Luego seleccione resources.arscen Filela lista y seleccione la identificación de Resouce Types, encontrará qué identificación causó este error.
  4. Para el ejemplo de la imagen siguiente, significa que hay una identificación denominada "contenedor" que no se puede encontrar en el archivo de diseño de un Fragmento/Actividad.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Tome el siguiente código, por ejemplo:

MyFragment myFragment = new MyFragment();
FragmentTransaction fragmentTransaction = requireActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, myFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
  1. En la segunda línea, obtuvimos el fragmentManager para la actividad (donde se aloja el fragmento actual)
  2. En la tercera línea, reemplace el fragmento actual conmyFragment
  3. Luego debes asegurarte de que el archivo de diseño de esta actividad tenga una vista con id=container. de lo contrario, obtendrá este error, ¡eso es todo!
zdd avatar Jun 17 '2015 07:06 zdd