¿Fragmento de Android no se encontró ninguna vista para ID?
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_activity
es 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?
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.
Este error también ocurre al tener Fragmentos anidados y agregarlos con getSupportFragmentManager() en lugar de getChildFragmentManager().
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.
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:
- Desde el menú de Android Studio, seleccione
Build | Analyze apk
- Seleccione el archivo apk donde obtuvo el error
- Luego seleccione
resources.arsc
enFile
la lista y seleccione la identificación deResouce Types
, encontrará qué identificación causó este error. - 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.
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();
- En la segunda línea, obtuvimos el fragmentManager para la actividad (donde se aloja el fragmento actual)
- En la tercera línea, reemplace el fragmento actual con
myFragment
- 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!