J'ai un fragment que j'essaie d'ajouter à une vue.
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");
}
Lorsque ce code est exécuté, j'obtiens l'erreur suivante dans le débogage.
java.lang.IllegalArgumentException: No view found for id 0x7f080011
for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}
feed_parser_activity
est un fragment qui est défini sur la disposition des fragments en xml.
J'utilise une FragmentActivity pour héberger la disposition des fragments contenant le feed_parser_layout
.
Suis-je en train de coder cela correctement ci-dessus?
android
android-fragments
illegalargumentexception
coder_For_Life22
la source
la source
Réponses:
J'avais aussi ce problème, jusqu'à ce que je réalise que j'avais spécifié la mauvaise disposition dans
setContentView()
laonCreate()
méthode de FragmentActivity.L'ID transmis dans
FragmentTransaction.add()
, dans votre casR.id.feedContentContainer
, doit être un enfant de la disposition spécifiée danssetContentView()
.Vous ne nous avez pas montré votre
onCreate()
méthode, alors c'est peut-être le même problème.la source
TextView
intérieur d'unRelativeLayout
est un enfant duRelativeLayout
.Cette erreur se produit également lorsque vous avez des fragments imbriqués et que vous les ajoutez avec getSupportFragmentManager () au lieu de getChildFragmentManager ().
la source
La solution consistait à utiliser
getChildFragmentManager()
au lieu de
getFragmentManager()
lors de l'appel à partir d'un fragment. Si vous appelez la méthode à partir d'une activité, utilisez alors
getFragmentManager()
.Cela résoudra le problème.
la source
getSupportFragmentManager()
place.getFragmentManager()
est obsolète, maintenant!J'ai eu ce problème (lors de la construction de mon interface utilisateur dans le code) et il était causé par mon
ViewPager
(qui montraitFragment
s) ne pas avoir un ensemble d'ID, donc j'ai simplement utilisépager.setID(id)
et puis cela a fonctionné.Cette page m'a aidé à comprendre cela.
la source
Un autre scénario que j'ai rencontré. Si vous utilisez des fragments imbriqués, dites un ViewPager dans un Fragment avec ses pages aussi Fragments.
Lorsque vous effectuez une transaction de fragment dans le fragment interne (page de ViewPager), vous aurez besoin
getActivity () est la clé ici. ...
la source
Dans mon cas, j'essayais d'afficher un DialogFragment contenant un pager et cette exception a été levée lorsque le FragmentPagerAdapter a tenté d'ajouter les fragments au pager. Sur la base de la réponse howettl, je suppose que cela était dû au parent du pageur n'était pas la vue définie dans setContentView () dans mon FragmentActivity.
Le seul changement que j'ai fait pour résoudre le problème a été de créer le FragmentPagerAdapter en passant dans un FragmentMager obtenu en appelant getChildFragmentManager (), pas celui obtenu en appelant getFragmentManager () comme je le fais normalement.
la source
Cette exception peut également se produire si l'ID de mise en page vers lequel vous passez
FragmentTransaction.replace(int ID, fragment)
existe dans d'autres mises en page gonflées. Assurez-vous que l'ID de mise en page est unique et qu'il devrait fonctionner.la source
Une réponse que j'ai lue sur un autre fil similaire à celui-ci qui a fonctionné pour moi quand j'ai eu ce problème impliquait la mise en page XML.
Votre logcat indique "Aucune vue trouvée pour l'identifiant 0x7f080011".
Ouvrez le
gen->package->R.java->id
, puis recherchez id0x7f080011
.Quand j'ai eu ce problème, cet identifiant appartenait à un
FrameLayout
dans monactivity_main.xml
fichier.Le FrameLayout n'avait pas d'ID (il n'y avait pas de déclaration
android:id = "blablabla"
).Assurez-vous que tous vos composants dans toutes vos présentations ont des ID, en particulier le composant cité dans le logcat.
la source
J'ai eu cette erreur lors de la mise à niveau de
com.android.support:support-v4:21.0.0
verscom.android.support:support-v4:22.1.1
.J'ai dû changer ma disposition à partir de ceci:
Pour ça:
La disposition DOIT donc avoir une vue enfant. Je suppose qu'ils l'ont appliqué dans la nouvelle bibliothèque.
la source
Avec des fragments imbriqués
Pour moi en utilisant
getChildFragmentManager()
au lieu d'ungetActivity().getSupportFragmentManager()
crash résolula source
Je sais que cela a déjà été répondu pour un scénario, mais mon problème était légèrement différent et j'ai pensé partager au cas où quelqu'un d'autre serait à ma place.
Je faisais une transaction à l'intérieur
onCreate()
, mais à ce stade, l'arborescence de la vue n'a pas été gonflée, vous obtenez donc la même erreur. Mettre le code de transaction dansonResume()
permis à tout de fonctionner correctement.Assurez-vous donc que votre code de transaction s'exécute après le gonflage de l'arborescence!
la source
onAttach
. Voir ma réponseJ'étais confronté à une erreur Nasty lors de l'utilisation de Viewpager dans Recycler View. Ci-dessous l'erreur que j'ai rencontrée dans une situation particulière. J'ai commencé un fragment qui avait un RecyclerView avec Viewpager (en utilisant FragmentStatePagerAdapter). Cela a bien fonctionné jusqu'à ce que je passe à un fragment différent en cliquant sur une cellule dans RecyclerView, puis que je retourne en utilisant le bouton Retour du téléphone et l'application se bloque.
Et ce qui est drôle à ce sujet, c'est que j'avais deux Viewpagers dans le même RecyclerView et que les deux étaient à environ 5 cellules (l'autre n'était pas visible à l'écran, il était en panne). Donc, au départ, j'ai simplement appliqué la solution au premier Viewpager et laissé l'autre tel quel (Viewpager utilisant des fragments).
La navigation en arrière a bien fonctionné, lorsque le premier téléavertisseur était visible. Maintenant, quand je suis descendu vers le second, puis que j'ai changé de fragment et que je suis revenu, il s'est écrasé (la même chose s'est produite avec le premier). J'ai donc dû changer les deux Viewpagers.
Quoi qu'il en soit, lisez ci-dessous pour trouver une solution de travail. Erreur de plantage ci-dessous:
J'ai passé des heures à le déboguer. Lisez cet article de discussion complet jusqu'au bas en appliquant toutes les solutions, y compris en vous assurant que je passe childFragmentManager.
Rien n'a fonctionné.
Enfin, au lieu d'utiliser FragmentStatePagerAdapter, j'ai étendu PagerAdapter et l'ai utilisé dans Viewpager sans utiliser de fragments. Je crois que certains où il y a un BUG avec des fragments imbriqués. Quoi qu'il en soit, nous avons des options. Lis ...
Le lien ci-dessous a été très utile:
Viewpager sans fragments
Le lien peut mourir, je publie ma solution implémentée ci-dessous:
}
J'espère que cela a été utile !!
la source
J'avais le même problème, mais mon problème se posait sur le changement d'orientation. Aucune des autres solutions n'a fonctionné. Il s'avère donc que j'ai oublié de supprimer
setRetainInstance(true);
de mes fragments, lors de la mise en page à deux ou un volets en fonction de la taille de l'écran.la source
Mon erreur était sur le
FragamentTransaction
.Je faisais ça
t.replace(R.layout.mylayout);
au lieu det.replace(R.id.mylayout);
La différence est que l'un est la mise en page et l'autre est une référence à la
layout(id)
la source
Juste au cas où quelqu'un aurait fait la même erreur stupide que moi; vérifiez que vous n'écrasez pas le contenu de l'activité quelque part (c.-à-d. recherchez des appels supplémentaires à setContentView)
Dans mon cas, en raison d'une copie et d'un collage imprudents, j'ai utilisé DataBindingUtil.setContentView dans mon fragment, au lieu de DataBindingUtil.inflate, qui a perturbé l'état de l'activité.
la source
J'ai eu ce même problème, laissez-moi poster mon code pour que vous puissiez tous le voir, et ne pas faire la même chose que moi.
Notez que je configurais des fragments avant moi
setContentView
. Oups.la source
setContentView
intérieuronBuildHeaders
Cette page semble être un bon emplacement central pour publier des suggestions sur le Fragment IllegalArgumentException. Voici encore une chose que vous pouvez essayer. C'est ce qui a finalement fonctionné pour moi:
J'avais oublié que j'avais un fichier de mise en page séparé pour l'orientation paysage. Après avoir ajouté mon conteneur FrameLayout là aussi, le fragment a fonctionné.
Sur une note distincte, si vous avez déjà essayé tout le reste suggéré sur cette page (et sur tout Internet également) et que vous vous êtes arraché les cheveux pendant des heures, envisagez de simplement jeter ces fragments ennuyeux et de revenir à une bonne vieille disposition standard. (C'est en fait ce que j'étais en train de faire lorsque j'ai finalement découvert mon problème.) Vous pouvez toujours utiliser le concept de conteneur. Cependant, au lieu de le remplir avec un fragment, vous pouvez utiliser la
include
balise xml pour le remplir avec la même disposition que vous auriez utilisée dans votre fragment. Vous pouvez faire quelque chose comme ça dans votre mise en page principale:où
former_fragment_layout
est le nom du fichier de disposition xml que vous tentiez d'utiliser dans votre fragment. Voir Réutiliser les mises en page avec include pour plus d'informations.la source
Dans mon cas, j'avais un SupportMapFragment dans un élément de vue recycleur (j'utilisais le surdébit inférieur "liteMode" qui fait apparaître la carte comme non interactive, presque comme une image statique). J'utilisais le FragmentManager correct, et tout semblait bien fonctionner ... avec une petite liste. Une fois que la liste des éléments a dépassé un peu la hauteur de l'écran, j'ai commencé à obtenir ce problème lors du défilement.
Il s'est avéré que c'était parce que j'injectais un SupportMapFragment dynamique à l'intérieur d'une vue, qui était à l'intérieur d'un autre fragment, pour contourner certains problèmes que je rencontrais lorsque j'essayais de le déclarer statiquement dans mon XML. De ce fait, la disposition de l'espace réservé au fragment n'a pu être remplacée par le fragment réel qu'une fois la vue attachée à la fenêtre, c'est-à-dire visible à l'écran. J'avais donc mis mon code pour initialiser le SupportMapFragment, faire le remplacement du fragment et appeler getMapAsync () dans l'événement onAttachedToWindow.
Ce que j'ai oublié de faire, c'est de m'assurer que mon code ne s'est pas exécuté deux fois. C'est-à-dire dans l'événement onAttachedToWindow, vérifiez si mon SupportMapFragment dynamique était toujours nul avant d'essayer d'en créer une nouvelle instance et de remplacer un fragment. Lorsque l'élément sort du haut de RecyclerView, il est détaché de la fenêtre, puis réattaché lorsque vous y faites défiler, de sorte que cet événement est déclenché plusieurs fois.
Une fois que j'ai ajouté la vérification nulle, cela ne s'est produit qu'une seule fois par article RecyclerView et le problème a disparu! TL; DR!
la source
Cela se produit lorsque vous appelez à partir d'un fragment à l'intérieur d'un autre.
utilisation :
la source
J'ai rencontré ce problème lorsque j'ai essayé de remplacer la vue par mon fragment dans
onCreateView()
. Comme ça:Ça m'a dit
J'ai ensuite résolu ce problème en mettant replace dans
onActivityCreated()
. Comme ça:onCreateView()
pour pouvoir la remplacer plus tardonActivityCreated()
J'espère que cela t'aides!
la source
J'ai corrigé ce bug, j'utilise le
commitNow()
remplacementcommit()
.C'est
commitNow
une méthode de synchronisation, lacommit()
méthode est une méthode asynchrone.la source
Dans mon cas, cette exception a été levée lorsque j'ai utilisé différents identifiants pour le même élément de disposition (espace réservé de fragment) tout en en ayant plusieurs pour différentes variantes de build. Pour une raison quelconque, cela fonctionne parfaitement bien lorsque vous remplacez fragment pour la première fois, mais si vous essayez de le faire à nouveau, vous obtenez cette exception. Assurez-vous donc que vous utilisez le même identifiant si vous disposez de plusieurs dispositions pour différentes variantes de build.
la source
Si vous essayez de remplacer un fragment dans un fragment par le
fragmentManager
mais vous ne gonflez pas le fragment parent qui peut provoquer un problème.Dans BaseFragment.java
OnCreateView
:Remplacez
super.onCreateView(inflater, container, savedInstanceState);
par gonfler la disposition correcte pour le fragment:la source
J'ai eu le même problème lors de la transaction de fragment lors de la création d'activité.
Le problème central est ce que Nick a déjà souligné - l'arbre de visualisation n'a pas encore été gonflé. Mais sa solution n'a pas fonctionné - la même exception dans onResume, onPostCreate etc.
La solution consiste à ajouter un rappel au fragment de conteneur pour signaler quand il est prêt:
Et puis en activité:
la source
Dans mon cas, j'utilisais un fichier de classe de fragment pour déclarer une classe d'adaptateur listview. Je viens d'utiliser un fichier différent pour la classe d'adaptateur public et l'erreur a disparu.
la source
Ce problème se produit également lorsque vous ne mettez pas
<include layout="@layout/your_fragment_layout"/>
votreapp_bar_main.xml
la source
Cela se produit également lorsque vous avez deux vues en deux fragments avec les mêmes identifiants
la source
J'ai eu le même problème que cela a été causé parce que j'ai essayé d'ajouter des fragments avant d'ajouter la disposition du conteneur à l'activité.
la source
Parfois, c'est parce que vous utilisez un BottomNavigationView. Si vous ouvrez une intention à partir de la navigation et que vous ouvrez un fragment dans cette activité, disons
alors l'activité ne pourra pas trouver la méthode de navigation que vous utilisez.
SOLUTION: modifiez l'activité pour fragmenter et gérer la navigation avec addOnBackStack dans votre application. Si vous avez implémenté la navigation Jetpack, utilisez simplement des fragments dans votre projet.
la source
Dans mon cas. J'ai un
Activity
serveur avec unFragment
certain temps, j'ai besoin de recréerFragment
s quandJ'efface tous les
Fragment
s et je les mets tousnull
en activité, mais Fragment se crée déjà lui-même, tandis que l'activité d'hôte est définie sur null, donc avant d'appeler la vue Fragment, vérifiez-la nullepar exemple
la source