355 Stimmen

Android Fragment keine Ansicht für ID gefunden?

Ich habe ein Fragment, das ich versuche, in eine Ansicht hinzuzufügen.

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, erhalte ich folgende Fehlermeldung in Debug

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 auf Fragment-Layout in xml eingestellt ist.
Ich verwende eine FragmentActivity zum Hosten des Fragment-Layouts, das die feed_parser_layout .
Habe ich das oben richtig kodiert?

2voto

Breeno Punkte 2812

In meinem Fall hatte ich ein SupportMapFragment in einer Recycler-Ansicht Element (ich war mit dem geringeren Overhead "liteMode", die die Karte als nicht-interaktiv, fast wie ein statisches Bild erscheinen lässt). Ich verwendete den richtigen FragmentManager, und alles schien gut zu funktionieren... mit einer kleinen Liste. Sobald die Liste der Elemente die Bildschirmhöhe um ein bisschen überschritten, dann begann ich dieses Problem beim Scrollen zu bekommen.

Es stellte sich heraus, dass es daran lag, dass ich ein dynamisches SupportMapFragment in eine Ansicht einfügte, 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 Platzhalter-Layout des Fragments erst dann durch das tatsächliche Fragment ersetzt werden, wenn die Ansicht an das Fenster angehängt, d. h. auf dem Bildschirm sichtbar war. Ich hatte also meinen Code für die Initialisierung des SupportMapFragments, das Ersetzen des Fragments und den Aufruf von getMapAsync() in das onAttachedToWindow-Ereignis gestellt.

Was ich vergessen habe, war sicherzustellen, dass mein Code nicht zweimal ausgeführt wird. D.h. in onAttachedToWindow-Ereignis, überprüfen Sie, ob meine dynamische SupportMapFragment noch null war, bevor Sie versuchen, eine neue Instanz von ihm zu erstellen und tun ein Fragment ersetzen. Wenn das Element aus dem oberen Bereich der RecyclerView verschwindet, wird es aus dem Fenster entfernt und dann wieder angehängt, wenn Sie zurück zu ihm scrollen, so dass dieses Ereignis mehrmals ausgelöst wird.

Nachdem ich die Null-Prüfung hinzugefügt hatte, passierte es nur noch einmal pro RecyclerView-Element und das Problem war gelöst! TL;DR!

2voto

Sanush Punkte 245

ChildFragmentManager anstelle von activity!!.supportFragmentManager verwenden

2voto

Bbake Waikhom Punkte 118

Dieses Problem tritt auch auf, wenn Sie nicht die <include layout="@layout/your_fragment_layout"/> in Ihrem app_bar_main.xml

1voto

Sajjad Haider Punkte 11

Ich hatte dieses Problem. In meinem Fall habe ich vergessen, FrameLayout in meiner Xml-Datei hinzufügen, nach dem Hinzufügen von Frame-Layout, mein Problem wurde gelöst.

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wraper"
        android:layout_above="@id/wraper"/>

1voto

koshur Punkte 104

Nach den Worten von https://stackoverflow.com/users/2075875/malachiasz

Diese Lösung funktioniert tatsächlich

getChildFragmentManager().beginTransaction().replace(R.id.cpu_bottomNav_frame,new fragment()).commit();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X