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 Fragment que está configurado en Fragment layout en xml.
Estoy usando una FragmentActivity para alojar el Fragment Layout que contiene el feed_parser_layout
.
¿Estoy codificando esto correctamente arriba?
android
android-fragments
illegalargumentexception
coder_For_Life22
fuente
fuente
Respuestas:
También estaba teniendo este problema, hasta que me di cuenta de que había especificado el diseño incorrecto
setContentView()
delonCreate()
método de FragmentActivity.La identificación pasada
FragmentTransaction.add()
, en su casoR.id.feedContentContainer
, debe ser hija del diseño especificado ensetContentView()
.No nos mostró su
onCreate()
método, por lo que quizás este sea el mismo problema.fuente
TextView
interior de aRelativeLayout
es hijo deRelativeLayout
.Este error también se produce al haber anidado Fragmentos y agregarlos con getSupportFragmentManager () en lugar de getChildFragmentManager ().
fuente
La solución fue usar
getChildFragmentManager()
en vez de
getFragmentManager()
cuando se llama desde un fragmento. Si está llamando al método desde una actividad, úselo
getFragmentManager()
.Eso resolverá el problema.
fuente
getSupportFragmentManager()
en su lugar.getFragmentManager()
ahora está en desuso.Tuve este problema (cuando construí mi IU en el código) y fue causado por mi
ViewPager
(que mostróFragment
s) que no tenía un conjunto de ID, así que simplemente lo usépager.setID(id)
y luego funcionó.Esta página me ayudó a resolver eso.
fuente
Otro escenario que he conocido. Si usa fragmentos anidados, digamos un ViewPager en un Fragmento con sus páginas también Fragmentos.
Cuando realice una transacción Fragment en el fragmento interno (página de ViewPager), necesitará
getActivity () es la clave aquí. ...
fuente
En mi caso, estaba tratando de mostrar un DialogFragment que contiene un localizador y esta excepción se produjo cuando el FragmentPagerAdapter intentó agregar los Fragmentos al localizador. Según la respuesta de howettl, supongo que se debió a que el padre Pager no era la vista establecida en setContentView () en mi FragmentActivity.
El único cambio que hice para resolver el problema fue crear el FragmentPagerAdapter pasando un FragmentMager obtenido llamando a getChildFragmentManager (), no el que obtuve llamando a getFragmentManager () como lo hago normalmente.
fuente
Esta excepción también puede ocurrir si el ID de diseño al que está pasando
FragmentTransaction.replace(int ID, fragment)
existe en otros diseños que se están inflando. Asegúrese de que la ID de diseño sea única y que funcione.fuente
Una respuesta que leí en otro hilo similar a este que funcionó para mí cuando tuve este problema involucró el diseño xml.
Su logcat dice "No se ha encontrado ninguna vista para el ID 0x7f080011".
Abre el
gen->package->R.java->id
y luego busca id0x7f080011
.Cuando tuve este problema, esta identificación pertenecía a un
FrameLayout
en miactivity_main.xml
archivo.FrameLayout no tenía una identificación (no había ninguna declaración
android:id = "blablabla"
).Asegúrese de que todos sus componentes en todos sus diseños tengan ID, particularmente el componente citado en el logcat.
fuente
Recibí este error cuando actualicé de
com.android.support:support-v4:21.0.0
acom.android.support:support-v4:22.1.1
.Tuve que cambiar mi diseño de esto:
A esto:
Por lo tanto, el diseño DEBE tener una vista secundaria. Supongo que hicieron cumplir esto en la nueva biblioteca.
fuente
Con fragmentos anidados
Para mí usando en
getChildFragmentManager()
lugar de ungetActivity().getSupportFragmentManager()
bloqueo resueltofuente
Sé que esto ya ha sido respondido para un escenario, pero mi problema era ligeramente diferente y pensé en compartirlo en caso de que alguien más estuviera en mi lugar.
Estaba haciendo una transacción dentro
onCreate()
, pero en este punto el árbol de vistas no se ha inflado, por lo que obtiene este mismo error. Poner el código de transacciónonResume()
hizo que todo funcionara bien.¡Tan solo asegúrese de que su código de transacción se ejecute después de que se haya inflado el árbol de vistas!
fuente
onAttach
. Ver mi respuestaEstaba enfrentando un error desagradable al usar Viewpager en Recycler View. Debajo del error que enfrenté en una situación especial. Comencé un fragmento que tenía un RecyclerView con Viewpager (usando FragmentStatePagerAdapter). Funcionó bien hasta que cambié a un fragmento diferente al hacer clic en una Celda en RecyclerView, y luego volví a navegar usando el botón Atrás del hardware del teléfono y la aplicación se bloqueó.
Y lo divertido de esto es que tenía dos Viewpagers en el mismo RecyclerView y ambos estaban a unas 5 celdas de distancia (el otro no era visible en la pantalla, estaba inactivo). Así que inicialmente solo apliqué la Solución al primer Viewpager y dejé otra como está (Viewpager usando Fragmentos).
Navegar hacia atrás funcionó bien, cuando la primera vista del localizador era visible. Ahora, cuando me desplacé hacia el segundo y luego cambié el fragmento y regresé, se estrelló (lo mismo sucedió con el primero). Así que tuve que cambiar los dos Viewpagers.
De todos modos, lea a continuación para encontrar una solución de trabajo. Error de bloqueo a continuación:
Pasé horas depurándolo. Lea esta publicación completa de Thread hasta el final aplicando todas las soluciones, incluso asegurándose de que estoy pasando childFragmentManager.
Nada funcionó.
Finalmente, en lugar de usar FragmentStatePagerAdapter, extendí PagerAdapter y lo usé en Viewpager sin usar fragmentos. Creo que hay algunos donde hay un ERROR con fragmentos anidados. De todos modos, tenemos opciones. Leer ...
El siguiente enlace fue muy útil:
Visor sin fragmentos
El enlace puede morir, así que estoy publicando mi Solución implementada a continuación:
}
Espero que esto haya sido útil.
fuente
Tuve el mismo problema, pero mi problema estaba sucediendo con el cambio de orientación. Ninguna de las otras soluciones funcionó. Resulta que olvidé eliminar
setRetainInstance(true);
de mis fragmentos, cuando hice un diseño de dos o un panel basado en el tamaño de la pantalla.fuente
Mi error fue en el
FragamentTransaction
.Estaba haciendo esto en
t.replace(R.layout.mylayout);
lugar det.replace(R.id.mylayout);
La diferencia es que uno es el diseño y el otro es una referencia al
layout(id)
fuente
Por si acaso alguien cometió el mismo estúpido error que yo cometí; compruebe que no está sobrescribiendo el contenido de la actividad en alguna parte (es decir, busque llamadas adicionales para configurar la vista de contenido)
En mi caso, debido a la copia y el pegado descuidados, utilicé DataBindingUtil.setContentView en mi fragmento, en lugar de DataBindingUtil.inflate, lo que estropeó el estado de la actividad.
fuente
Tuve este mismo problema, permítanme publicar mi código para que todos puedan verlo, y no hacer lo mismo que yo.
Tenga en cuenta que estaba configurando fragmentos antes que yo
setContentView
. Ooopsfuente
setContentView
interior en mionBuildHeaders
Esta página parece ser una buena ubicación central para publicar sugerencias sobre Fragment IllegalArgumentException. Aquí hay una cosa más que puedes probar. Esto es lo que finalmente funcionó para mí:
Había olvidado que tenía un archivo de diseño separado para la orientación horizontal. Después de agregar mi contenedor FrameLayout allí también, el fragmento funcionó.
En una nota aparte, si ya ha intentado todo lo demás sugerido en esta página (y todo el Internet también) y ha estado arrancándose el cabello durante horas, considere simplemente deshacerse de estos molestos fragmentos y volver a un buen diseño estándar anterior. (Eso es en realidad lo que estaba haciendo cuando finalmente descubrí mi problema). Todavía puede usar el concepto de contenedor. Sin embargo, en lugar de llenarlo con un fragmento, puede usar la
include
etiqueta xml para llenarlo con el mismo diseño que habría usado en su fragmento. Podría hacer algo como esto en su diseño principal:donde
former_fragment_layout
está el nombre del archivo de diseño xml que estaba tratando de usar en su fragmento. Consulte Reutilización de diseños con include para obtener más información.fuente
En mi caso, tenía un SupportMapFragment en un elemento de vista de reciclador (estaba usando el "liteMode" más bajo que hace que el mapa aparezca como no interactivo, casi como una imagen estática). Estaba usando el FragmentManager correcto, y todo parecía funcionar bien ... con una pequeña lista. Una vez que la lista de elementos excedió un poco la altura de la pantalla, comencé a tener este problema al desplazarme.
Resultó que fue porque estaba inyectando un SupportMapFragment dinámico dentro de una vista, que estaba dentro de otro fragmento, para solucionar algunos problemas que tenía al intentar declararlo estáticamente en mi XML. Debido a esto, el diseño del marcador de posición del fragmento solo se puede reemplazar con el fragmento real una vez que la vista se adjuntó a la ventana, es decir, visible en la pantalla. Así que puse mi código para inicializar SupportMapFragment, hacer el reemplazo de Fragment y llamar a getMapAsync () en el evento onAttachedToWindow.
Lo que olvidé hacer fue asegurarme de que mi código no se ejecutara dos veces. Es decir, en el evento onAttachedToWindow, compruebe si mi SupportMapFragment dinámico seguía siendo nulo antes de intentar crear una nueva instancia y hacer un reemplazo de Fragment. Cuando el elemento sale de la parte superior de RecyclerView, se separa de la ventana y luego se vuelve a unir cuando se desplaza hacia él, por lo que este evento se dispara varias veces.
Una vez que agregué el cheque nulo, ¡sucedió solo una vez por elemento RecyclerView y el problema desapareció! TL; DR!
fuente
Esto sucede cuando estás llamando desde un fragmento dentro de otro.
utilizar :
fuente
Encontré este problema cuando intenté reemplazar la vista con mi fragmento
onCreateView()
. Me gusta esto:Me dijo
Luego solucioné este problema al poner reemplazar en
onActivityCreated()
. Me gusta esto:onCreateView()
para poder reemplazarla más tardeonActivityCreated()
¡Espero que esto ayude!
fuente
Arreglé este error, uso el
commitNow()
reemplazocommit()
.El
commitNow
es un método de sincronización, elcommit()
método es un método asíncrono.fuente
En mi caso, esta excepción se produjo cuando utilicé diferentes identificadores para el mismo elemento de diseño (marcador de posición de fragmento) mientras tenía varios de ellos para diferentes variantes de compilación. Por alguna razón, funciona perfectamente bien cuando reemplaza un fragmento por primera vez, pero si intenta hacerlo nuevamente, obtiene esta excepción. Por lo tanto, asegúrese de estar usando la misma identificación si tiene varios diseños para diferentes variantes de compilación.
fuente
Si está intentando reemplazar un fragmento dentro de un fragmento con el
fragmentManager
pero no está inflando el fragmento padre que puede causar un problema.En BaseFragment.java
OnCreateView
:Reemplace
super.onCreateView(inflater, container, savedInstanceState);
con inflar el diseño correcto para el fragmento:fuente
Tuve el mismo problema cuando estaba haciendo una transacción fragmentada mientras creaba la actividad.
El problema central es lo que Nick ya ha señalado : el árbol de vista aún no se ha inflado. Pero su solución no funcionó: la misma excepción en onResume, onPostCreate, etc.
La solución es agregar una devolución de llamada al fragmento de contenedor para indicar cuándo está listo:
Y luego en actividad:
fuente
En mi caso, estaba usando un archivo de clase de fragmento para declarar una clase de adaptador de vista de lista. Acabo de usar un archivo diferente para la clase de adaptador público y el error desapareció.
fuente
Este problema también ocurre cuando no coloca
<include layout="@layout/your_fragment_layout"/>
suapp_bar_main.xml
fuente
También sucede cuando tiene dos vistas en dos fragmentos con los mismos identificadores
fuente
Tuve el mismo problema que causó porque intenté agregar fragmentos antes de agregar el diseño del contenedor a la actividad.
fuente
A veces es porque está utilizando un BottomNavigationView. Si abres una intención desde la navegación y en esa actividad abres un fragmento, digamos
entonces la Actividad no podrá encontrar el método de navegación que está utilizando.
SOLUCIÓN: Cambie la actividad para fragmentar y manejar la navegación con addOnBackStack en su aplicación. Si ha implementado la navegación Jetpack, simplemente use fragmentos en su proyecto.
fuente
En mi caso. Tengo un tiempo
Activity
con variosFragment
s necesito recrearFragment
s cuandoBorro todo
Fragment
sy configuro todo paranull
en actividad, pero Fragment ya se creó a sí mismo, mientras que la actividad del host es nula, así que antes de llamar a la vista Fragment, verifíquelo como nulopor ejemplo
fuente