Google Map V2 android error Aufblasende Klasse Fragment Fehler

Ich schaffe eine Anwendung mit Tab und ich habe eine Karte in einer der Registerkarte, wenn ich die Karte von ihr öffne, funktioniert es gut und wenn ich irgendeine andere Registerkarte besuche, die Zeit auch es funktioniert gut, aber wenn ich wieder auf die Karte Tab App abstürzt Mit diesem Fehler.

04-09 14:10:43.866: E/AndroidRuntime(28184): android.view.InflateException: Binary XML file line #42: Error inflating class fragment 04-09 14:10:43.866: E/AndroidRuntime(28184): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 04-09 14:10:43.866: E/AndroidRuntime(28184): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 04-09 14:10:43.866: E/AndroidRuntime(28184): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 04-09 14:10:43.866: E/AndroidRuntime(28184): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 04-09 14:10:43.866: E/AndroidRuntime(28184): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 04-09 14:10:43.866: E/AndroidRuntime(28184): at com.research.fragmenttabstudy.tabA.TodaysDealLocation.onCreateView(TodaysDealLocation.java:43) 

Hier ist mein Code:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d("err","todaysdeal location"); Log.d("err","todaysdeal location"+inflater.toString()+" "+container.toString()+" "); super.onCreateView(inflater, container, savedInstanceState); // map.clear(); View view = inflater.inflate(R.layout.todays_deal_location, container, false); Log.d("err",view.toString()); back = (ImageView) view.findViewById(R.id.list); back.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // Constants.passcode_chk = 0; // finish(); mActivity.popFragments(); } }); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); map = ((SupportMapFragment) getFragmentManager().findFragmentById( R.id.mapp)).getMap(); map.setMapType(GoogleMap.MAP_TYPE_NORMAL); } 

Xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/topbar" /> <!-- <ImageView --> <!-- android:id="@+id/deallistmenu" --> <!-- android:layout_width="wrap_content" --> <!-- android:layout_height="wrap_content" --> <!-- android:layout_marginLeft="5dp" --> <!-- android:layout_marginTop="9dp" --> <!-- android:src="@drawable/deallist_menubtn" /> --> <ImageView android:id="@+id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="7dp" android:layout_marginTop="7dp" android:src="@drawable/map_list" /> <RelativeLayout android:id="@+id/frameLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/imageView1" android:layout_marginTop="-4.8dp" > <!-- box layout.................................................................... --> <!-- box layout.................................................................... --> <fragment android:id="@+id/mapp" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/tv_location" android:name="com.google.android.gms.maps.SupportMapFragment" /> <!-- <ZoomControls --> <!-- android:id="@+id/zoomControls" --> <!-- android:layout_width="wrap_content" --> <!-- android:layout_height="wrap_content" --> <!-- android:layout_alignParentBottom="true" --> <!-- android:layout_alignParentLeft="true" --> <!-- android:layout_marginBottom="30dp" --> <!-- android:layout_marginLeft="100dp" /> --> </RelativeLayout> <TextView android:id="@+id/barTitle" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:gravity="center" android:lines="1" android:maxLines="1" android:paddingLeft="50dip" android:paddingRight="55dip" android:singleLine="true" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@android:color/white" android:textSize="18dp" /> </RelativeLayout> 

  • Was bedeutet der Parameter LayoutInflater attachToRoot?
  • "Vermeiden Sie es, null als die Wurzel zu hinterlassen" Warnung beim Aufblasen der Ansicht für die Verwendung von AlertDialog
  • Unerwartete LayoutParams mit einem aufgeblasenen LinearLayout
  • Android Stringblock.get NullPointer Ausnahme auf Lollipop
  • Einstellen von Text auf mehrfach aufgeblasenen EditTexts bewirkt, dass alle nach der Rotation mit demselben Text gefüllt werden
  • Drag & Drop-Symbole auf den Startbildschirm
  • Aufblasen neuer Layout xml für jede Ansicht - instantiateItem in PagerAdapter
  • Android LayoutInflater Problem
  • 5 Solutions collect form web for “Google Map V2 android error Aufblasende Klasse Fragment Fehler”

    Ihr Problem ist, dass Sie die Google Maps v2 Fragment in XML deklariert haben, also jedes Mal, wenn Sie das XML aufblasen, macht es ein neues Fragment. Allerdings ist die ID des Fragments im XML hartcodiert, also wird es versuchen, das neue Fragment mit der gleichen ID wie dem, das bereits läuft, zu erstellen. Zwei laufende Fragmente können nicht die gleiche ID haben, also stürzt die App ab.

    Der beste Weg, um dies zu beheben ist, um die Karte Fragment programmgesteuert zu machen. Ein gutes Beispiel dafür finden Sie im ProgrammaticDemoActivity.java Teil des Google Maps Beispiel Projekt.

    Allerdings, wenn aus irgendeinem Grund müssen Sie Ihr Fragment in XML deklarieren, können Sie es funktionieren, indem Sie das alte Kartenfragment töten, wenn Sie die Ansicht verlassen, so dass die neue erstellt werden kann.

    Sie können so etwas wie:

     private void killOldMap() { SupportMapFragment mapFragment = ((SupportMapFragment) getSherlockActivity() .getSupportFragmentManager().findFragmentById(R.id.map)); if(mapFragment != null) { FragmentManager fM = getFragmentManager(); fM.beginTransaction().remove(mapFragment).commit(); } } 

    Und ruf es dann von onDetach() und onDestroyView() an, um sicherzustellen, dass die alte Karte getötet wird.

    Wie Sie sehen können, ist das ein bisschen Hack und Sie sind am besten aus nur programmgesteuert machen Sie Ihre App statt XML zu verwenden.

    Versuche dies…

    Nennen Sie diese Funktion von onDetach () und onDestroyView (), um vorhandene Fragmenttransaktion zu töten.

     private void commitMaps() { if (null != mapFragment) { getFragmentManager().beginTransaction().remove(mapFragment).commitAllowingStateLoss(); } } 

    Manchmal bekommst du "IllegalStateException: Kann diese Aktion nach onSaveInstanceState nicht ausführen", wenn du () existiere map transaction. Um diese Ausnahme zu vermeiden, sollten Sie commitAllowingStateLoss () verwenden, wenn Sie die Transaktion entfernen.

    Unterschied zwischen commit () und commitAllowingStateLoss ()

    Vergewissern Sie sich, dass Ihre Aktivität die Fragmentaktivität erweitert und ersetzt

     map=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 

    Und entfernen Sie " android:layout_below="@+id/tv_location" because it is inside relative layout "

    Gehen Sie mit diesem und lassen Sie mich wissen.

    Ein Kartenfragment ist bereits erstellt, und wenn du versuchst, auf die Kartenseite zurückzukehren, versucht es, ein anderes Fragment auf der Oberseite zu schaffen. Unter Code ist endlich gut für mich:

    XML:

     <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment"/> 

    Das erste Problem sehe ich hier mit dem Code, den du dir vorgestellt hast, ist diese Zeile:

     map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.mapp)).getMap(); 

    Sie versuchen, ein SupportMapFragment Objekt mit dem üblichen FragmentManager . das ist falsch. Um das SupportMapFragment Objekt zu erhalten, SupportMapFragment du SupportMapFragment wie SupportMapFragment verwenden:

     map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapp)).getMap(); 

    Aber meine Vermutung ist, dass die Probleme, die Sie gerade jetzt erleben, noch nicht aus diesem Fehler abgeleitet sind. Ich denke, Sie referenzieren die google-play-services Bibliothek der google-support-v4 Bibliothek auf die falsche Art und Weise.

    Sie können einen Blick auf diese Blog-Post Ich schrieb auf, wie Google Map API V2 zu Ihnen hinzufügen Anwendung:

    Google Map API V2

    AKTUALISIEREN:

    Wenn du min SDK 11 hast, kannst du das Fragment auf diesen Code umstellen:

     <fragment android:id="@+id/mapp" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/tv_location" android:name="com.google.android.gms.maps.MapFragment" /> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.