Ich habe ein Fragment, das ich einer Ansicht hinzufügen möchte.
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");
}
Wenn dieser Code ausgeführt wird, wird beim Debuggen der folgende Fehler angezeigt.
java.lang.IllegalArgumentException: No view found for id 0x7f080011
for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}
feed_parser_activity
ist ein Fragment, das in XML auf Fragmentlayout festgelegt ist.
Ich verwende eine FragmentActivity, um das Fragment-Layout mit dem zu hosten feed_parser_layout
.
Codiere ich das oben richtig?
android
android-fragments
illegalargumentexception
coder_For_Life22
quelle
quelle
Antworten:
Ich hatte auch dieses Problem, bis mir klar wurde, dass ich in
setContentView()
deronCreate()
Methode der FragmentActivity das falsche Layout angegeben hatte .Die übergebene ID
FragmentTransaction.add()
muss in Ihrem FallR.id.feedContentContainer
ein untergeordnetes Element des unter angegebenen Layouts seinsetContentView()
.Sie haben uns Ihre
onCreate()
Methode nicht gezeigt , vielleicht ist dies das gleiche Problem.quelle
TextView
Inneres von aRelativeLayout
ist ein Kind vonRelativeLayout
.Dieser Fehler tritt auch auf, wenn Fragmente verschachtelt und mit getSupportFragmentManager () anstelle von getChildFragmentManager () hinzugefügt wurden.
quelle
Die Lösung war zu verwenden
getChildFragmentManager()
anstatt
getFragmentManager()
beim Aufruf von einem Fragment. Wenn Sie die Methode aus einer Aktivität aufrufen, verwenden Sie
getFragmentManager()
.Das wird das Problem lösen.
quelle
getSupportFragmentManager()
stattdessen verwenden.getFragmentManager()
jetzt veraltet!Ich hatte dieses Problem (beim Erstellen meiner Benutzeroberfläche in Code) und es wurde dadurch verursacht,
ViewPager
dass (das zeigteFragment
s) keine ID festgelegt hatte, also habe ich es einfach verwendetpager.setID(id)
und dann hat es funktioniert.Diese Seite hat mir geholfen, das herauszufinden.
quelle
Ein anderes Szenario, das ich getroffen habe. Wenn Sie verschachtelte Fragmente verwenden, sagen Sie einen ViewPager in einem Fragment mit seinen Seiten auch Fragmente.
Wenn Sie eine Fragmenttransaktion im inneren Fragment (Seite von ViewPager) ausführen, benötigen Sie
getActivity () ist hier der Schlüssel. ...
quelle
In meinem Fall habe ich versucht, ein DialogFragment anzuzeigen, das einen Pager enthält, und diese Ausnahme wurde ausgelöst, als der FragmentPagerAdapter versuchte, die Fragmente dem Pager hinzuzufügen. Basierend auf der Howettl-Antwort denke ich, dass es an dem übergeordneten Pager lag, dass nicht die in setContentView () in meiner FragmentActivity festgelegte Ansicht war.
Die einzige Änderung, die ich vorgenommen habe, um das Problem zu lösen, bestand darin, den FragmentPagerAdapter zu erstellen, der in einem FragmentMager übergeben wird, der durch Aufrufen von getChildFragmentManager () erhalten wurde, und nicht durch Aufrufen von getFragmentManager (), wie ich es normalerweise tue.
quelle
Diese Ausnahme kann auch auftreten, wenn die Layout-ID, an die Sie übergeben,
FragmentTransaction.replace(int ID, fragment)
in anderen Layouts vorhanden ist, die aufgeblasen werden. Stellen Sie sicher, dass die Layout-ID eindeutig ist und funktionieren sollte.quelle
Eine Antwort, die ich in einem anderen ähnlichen Thread gelesen habe, der für mich funktioniert hat, als ich dieses Problem hatte, betraf das Layout xml.
Ihr Logcat sagt "Keine Ansicht für ID 0x7f080011 gefunden".
Öffnen Sie die
gen->package->R.java->id
und suchen Sie nach ID0x7f080011
.Als ich dieses Problem hatte, gehörte diese ID zu a
FrameLayout
in meineractivity_main.xml
Datei.Das FrameLayout hatte keine ID (es gab keine Anweisung
android:id = "blablabla"
).Stellen Sie sicher, dass alle Ihre Komponenten in allen Ihren Layouts IDs haben, insbesondere die im Logcat angegebene Komponente.
quelle
Ich habe diesen Fehler beim Upgrade von
com.android.support:support-v4:21.0.0
auf erhaltencom.android.support:support-v4:22.1.1
.Ich musste mein Layout davon ändern:
Dazu:
Das Layout muss also eine untergeordnete Ansicht haben. Ich gehe davon aus, dass sie dies in der neuen Bibliothek durchgesetzt haben.
quelle
Mit verschachtelten Fragmenten
Für mich mit
getChildFragmentManager()
anstelle vongetActivity().getSupportFragmentManager()
gelöstem Absturzquelle
Ich weiß, dass dies bereits für ein Szenario beantwortet wurde, aber mein Problem war etwas anders und ich dachte, ich würde es teilen, falls jemand anderes in meinen Schuhen steckt.
Ich habe eine Transaktion innerhalb ausgeführt
onCreate()
, aber zu diesem Zeitpunkt wurde der Ansichtsbaum noch nicht aufgeblasen, sodass Sie denselben Fehler erhalten. Durch das Eingeben des Transaktionscodes liefonResume()
alles einwandfrei.Stellen Sie also sicher, dass Ihr Transaktionscode ausgeführt wird, nachdem der Ansichtsbaum aufgeblasen wurde!
quelle
onAttach
. Siehe meine AntwortBei der Verwendung von Viewpager in Recycler View ist ein böser Fehler aufgetreten. Unter Fehler stand ich in einer besonderen Situation. Ich habe ein Fragment gestartet, das eine RecyclerView mit Viewpager hatte (mit FragmentStatePagerAdapter). Es funktionierte gut, bis ich beim Klicken auf eine Zelle in RecyclerView zu einem anderen Fragment wechselte und dann mit der Hardware-Schaltfläche "Zurück" des Telefons zurück navigierte und die App abstürzte.
Und das Lustige daran war, dass ich zwei Viewpager in derselben RecyclerView hatte und beide ungefähr 5 Zellen entfernt waren (andere waren auf dem Bildschirm nicht sichtbar, sie waren ausgefallen). Also habe ich die Lösung zunächst nur auf den ersten Viewpager angewendet und den anderen so belassen, wie er ist (Viewpager mit Fragmenten).
Das Zurücknavigieren funktionierte einwandfrei, als der Pager für die erste Ansicht sichtbar war. Als ich jetzt zum zweiten gescrollt habe und dann das Fragment gewechselt habe und zurückgekommen bin, ist es abgestürzt (dasselbe ist mit dem ersten passiert). Also musste ich beide Viewpager wechseln.
Wie auch immer, lesen Sie unten, um eine funktionierende Lösung zu finden. Absturzfehler unten:
Verbrachte Stunden damit, es zu debuggen. Lesen Sie diesen vollständigen Thread-Beitrag bis zum Ende und wenden Sie alle Lösungen an, einschließlich der Sicherstellung, dass ich childFragmentManager übergebe.
Nichts hat geklappt.
Anstatt FragmentStatePagerAdapter zu verwenden, habe ich PagerAdapter erweitert und in Viewpager verwendet, ohne Fragmente zu verwenden. Ich glaube einige, wo es einen BUG mit verschachtelten Fragmenten gibt. Wie auch immer, wir haben Optionen. Lesen ...
Der folgende Link war sehr hilfreich:
Viewpager ohne Fragmente
Der Link kann sterben, daher veröffentliche ich meine implementierte Lösung hier unten:
}}
Hoffe das war hilfreich !!
quelle
Ich hatte das gleiche Problem, aber mein Problem trat bei einem Orientierungswechsel auf. Keine der anderen Lösungen funktionierte. Es stellt sich also heraus, dass ich vergessen habe,
setRetainInstance(true);
aus meinen Fragmenten zu entfernen , wenn ich ein Layout mit zwei oder einem Fenster basierend auf der Bildschirmgröße erstellt habe.quelle
Mein Fehler war auf der
FragamentTransaction
.Ich habe das
t.replace(R.layout.mylayout);
stattdessen gemachtt.replace(R.id.mylayout);
Der Unterschied besteht darin, dass eines das Layout und das andere ein Verweis auf das ist
layout(id)
quelle
Nur für den Fall, dass jemand den gleichen dummen Fehler gemacht hat, den ich gemacht habe; Stellen Sie sicher, dass Sie den Aktivitätsinhalt nicht irgendwo überschreiben (dh suchen Sie nach zusätzlichen Aufrufen für setContentView).
In meinem Fall habe ich aufgrund von unachtsamem Kopieren und Einfügen DataBindingUtil.setContentView in meinem Fragment anstelle von DataBindingUtil.inflate verwendet, wodurch der Status der Aktivität durcheinander gebracht wurde.
quelle
Ich hatte das gleiche Problem. Lassen Sie mich meinen Code veröffentlichen, damit Sie ihn alle sehen können, und nicht das Gleiche tun wie ich.
Beachten Sie, dass ich Fragmente vor mir eingerichtet habe
setContentView
. Hoppla.quelle
setContentView
in meinonBuildHeaders
Diese Seite scheint ein guter zentraler Ort für die Veröffentlichung von Vorschlägen zur Fragment IllegalArgumentException zu sein. Hier ist noch eine Sache, die Sie versuchen können. Das hat endlich bei mir funktioniert:
Ich hatte vergessen, dass ich eine separate Layoutdatei für die Querformatausrichtung hatte. Nachdem ich dort auch meinen FrameLayout-Container hinzugefügt hatte, funktionierte das Fragment.
Wenn Sie bereits alles andere auf dieser Seite (und auch im gesamten Internet) vorgeschlagen und sich stundenlang die Haare ausgezogen haben, sollten Sie diese lästigen Fragmente einfach wegwerfen und zu einem guten alten Standardlayout zurückkehren. (Genau das war ich gerade, als ich endlich mein Problem entdeckte.) Sie können das Containerkonzept weiterhin verwenden. Anstatt es mit einem Fragment
include
zu füllen, können Sie es mit dem XML- Tag mit demselben Layout füllen, das Sie in Ihrem Fragment verwendet hätten. Sie könnten in Ihrem Hauptlayout so etwas tun:Wo
former_fragment_layout
ist der Name der XML-Layoutdatei, die Sie in Ihrem Fragment verwenden wollten? Weitere Informationen finden Sie unter Wiederverwenden von Layouts mit Include .quelle
In meinem Fall hatte ich ein SupportMapFragment in einem Recycler-Ansichtselement (ich habe den unteren Overhead "liteMode" verwendet, wodurch die Karte als nicht interaktiv erscheint, fast wie ein statisches Bild). Ich habe den richtigen FragmentManager verwendet und alles schien gut zu funktionieren ... mit einer kleinen Liste. Sobald die Liste der Elemente die Bildschirmhöhe ein wenig überschritten hatte, trat dieses Problem beim Scrollen auf.
Es stellte sich heraus, dass ich ein dynamisches SupportMapFragment in eine Ansicht eingefügt habe, die sich in einem anderen Fragment befand, um einige Probleme zu umgehen, die ich hatte, als ich versuchte, es statisch in meinem XML zu deklarieren. Aus diesem Grund konnte das Fragment-Platzhalter-Layout nur dann durch das tatsächliche Fragment ersetzt werden, wenn die Ansicht an das Fenster angehängt wurde, dh auf dem Bildschirm sichtbar war. Also hatte ich meinen Code zum Initialisieren des SupportMapFragments, zum Ersetzen des Fragments und zum Aufrufen von getMapAsync () im Ereignis onAttachedToWindow eingegeben.
Was ich vergessen habe war sicherzustellen, dass mein Code nicht zweimal ausgeführt wurde. Überprüfen Sie im Ereignis onAttachedToWindow, ob mein dynamisches SupportMapFragment noch null war, bevor Sie versuchen, eine neue Instanz davon zu erstellen und ein Fragment zu ersetzen. Wenn das Element oben in der RecyclerView entfernt wird, wird es vom Fenster getrennt und beim Zurückblättern wieder angehängt, sodass dieses Ereignis mehrmals ausgelöst wird.
Nachdem ich die Nullprüfung hinzugefügt hatte, passierte sie nur einmal pro RecyclerView-Element und das Problem verschwand! TL; DR!
quelle
Dies geschieht, wenn Sie von einem Fragment in einem anderen aufrufen.
verwenden :
quelle
Dieses Problem trat auf, als ich versuchte, die Ansicht durch mein Fragment in zu ersetzen
onCreateView()
. So was:Es hat mir gesagt
Dann habe ich dieses Problem mit dem Ersetzen behoben
onActivityCreated()
. So was:onCreateView()
damit Sie sie später ersetzen könnenonActivityCreated()
Hoffe das hilft!
quelle
Ich habe diesen Fehler behoben, ich benutze den
commitNow()
Ersatzcommit()
.Das
commitNow
ist eine Synchronisationsmethode, diecommit()
Methode ist eine asynchrone Methode.quelle
In meinem Fall wurde diese Ausnahme ausgelöst, als ich verschiedene IDs für dasselbe Layoutelement (Fragmentplatzhalter) verwendete und mehrere davon für verschiedene Build-Varianten hatte. Aus irgendeinem Grund funktioniert es einwandfrei, wenn Sie das Fragment zum ersten Mal ersetzen. Wenn Sie es jedoch erneut versuchen, wird diese Ausnahme angezeigt. Stellen Sie also sicher, dass Sie dieselbe ID verwenden, wenn Sie mehrere Layouts für verschiedene Build-Varianten haben.
quelle
Wenn Sie versuchen, ein Fragment innerhalb eines Fragments durch das zu ersetzen,
fragmentManager
aber das übergeordnete Fragment nicht aufblasen ein Problem verursachen kann.In BaseFragment.java
OnCreateView
:Ersetzen Sie
super.onCreateView(inflater, container, savedInstanceState);
durch Aufblasen das richtige Layout für das Fragment:quelle
Ich hatte das gleiche Problem, als ich während der Aktivitätserstellung Fragmenttransaktionen durchführte.
Das Kernproblem ist das, worauf Nick bereits hingewiesen hat - der Ansichtsbaum wurde noch nicht aufgeblasen. Aber seine Lösung hat nicht funktioniert - die gleiche Ausnahme in onResume, onPostCreate usw.
Die Lösung besteht darin, dem Containerfragment einen Rückruf hinzuzufügen, um zu signalisieren, wann es bereit ist:
Und dann in Aktivität:
quelle
In meinem Fall habe ich eine Fragmentklassendatei verwendet, um eine Listview-Adapterklasse zu deklarieren. Ich habe gerade eine andere Datei für die öffentliche Adapterklasse verwendet und der Fehler war verschwunden.
quelle
Dieses Problem tritt auch auf, wenn Sie
<include layout="@layout/your_fragment_layout"/>
Ihre nicht eingebenapp_bar_main.xml
quelle
Dies passiert auch, wenn Sie zwei Ansichten in zwei Fragmenten mit denselben IDs haben
quelle
Ich hatte das gleiche Problem, das verursacht wurde, weil ich versucht habe, Fragmente hinzuzufügen, bevor ich das Containerlayout zur Aktivität hinzufügte.
quelle
Manchmal liegt es daran, dass Sie eine BottomNavigationView verwenden. Wenn Sie eine Absicht über die Navigation öffnen und in dieser Aktivität ein Fragment öffnen, sagen wir
In diesem Fall kann die Aktivität die von Ihnen verwendete Navigationsmethode nicht finden.
LÖSUNG: Ändern Sie die Aktivität in fragmentieren und verwalten Sie die Navigation mit addOnBackStack in Ihrer App. Wenn Sie die Jetpack-Navigation implementiert haben, verwenden Sie einfach Fragmente in Ihrem Projekt.
quelle
In meinem Fall. Ich habe eine Zeit
Activity
mit mehreren Server, dieFragment
ich neu erstellen muss,Fragment
wennIch lösche alle
Fragment
s und setze alle aufnull
lösche in Aktivität, aber Fragment erstellt sich bereits selbst, während die Host-Aktivität Bean auf Null gesetzt ist. Überprüfen Sie sie daher vor dem Aufruf der Fragmentansicht auf Nullbeispielsweise
quelle