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?

21voto

garibay Punkte 1046

In meinem Fall habe ich versucht, ein DialogFragment anzuzeigen, das einen Pager enthält, und diese Ausnahme wurde ausgelöst, als der FragmentPagerAdapter versucht hat, die Fragmente zum Pager hinzuzufügen. Basierend auf howettl Antwort vermute ich, dass es aufgrund der Pager übergeordneten war nicht die Ansicht in setContentView() in meinem FragmentActivity festgelegt.

Die einzige Änderung, die ich vorgenommen habe, um das Problem zu lösen, bestand darin, den FragmentPagerAdapter zu erstellen und einen FragmentMager zu übergeben, der durch den Aufruf von getChildFragmentManager() erhalten wurde, und nicht den, der durch den Aufruf von getFragmentManager() erhalten wurde, wie ich es normalerweise tue.

    public class PagerDialog extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}

18voto

ealihodzic Punkte 199

Diese Ausnahme kann auch auftreten, wenn die Layout-ID, die Sie an FragmentTransaction.replace(int ID, fragment) in anderen Layouts, die aufgeblasen werden, vorhanden ist. Stellen Sie sicher, dass die Layout-ID eindeutig ist, dann sollte es funktionieren.

18voto

UdayaLakmal Punkte 3825

Mit Verschachtelte Fragmente

Für mich durch die Verwendung von getChildFragmentManager() 代わりに getActivity().getSupportFragmentManager() behobener Absturz

java.lang.IllegalArgumentException: Keine Ansicht für id gefunden

17voto

scottysseus Punkte 1732

Eine Antwort, die ich in einem anderen Thread, der diesem ähnlich ist, gelesen habe und die bei mir funktionierte, als ich dieses Problem hatte, bezog sich auf das Layout xml.

Ihr Logcat sagt "Keine Ansicht für id 0x7f080011 gefunden".

Abra el gen->package->R.java->id und suchen Sie dann nach id 0x7f080011 .

Als ich dieses Problem hatte, gehörte diese ID zu einem FrameLayout in meinem activity_main.xml Datei.

Das FrameLayout hatte keine ID (es gab keine Anweisung android:id = "blablabla" ).

Vergewissern Sie sich, dass alle Ihre Komponenten in allen Ihren Layouts IDs haben, insbesondere die im Logcat zitierte Komponente.

14voto

ono Punkte 2912

Ich habe diesen Fehler erhalten, als ich ein Upgrade von com.android.support:support-v4:21.0.0 zu com.android.support:support-v4:22.1.1 .

Ich musste mein Layout daher ändern:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout> 

Zu diesem:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

</FrameLayout> 

Das Layout MUSS haben eine untergeordnete Ansicht. Ich nehme an, dass sie dies in der neuen Bibliothek durchgesetzt haben.

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