2016-12-09 2 views
1

Ich verwende eine Tabbed-Aktivität und im ersten Fragment verwende ich Map-Fragment.Es funktioniert alles gut, aber das Problem ist, wenn ich zwischen anderen Fragment in dieser Aktivität ändern, stürzt ganze Aktivität . Nach dem Entfernen der Code der Karte Fragment läuft well.But i eine Karte innerhalb des Fragments setzen wollen, so wenden Sie sich bitte help.Here für Karte Fragment mein xml-Code istMap Fragment in einem anderen Fragment verursacht Aktivität zum Absturz

 <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="350dp" 
    android:layout_height="200dp" 
    android:layout_marginTop="20dp" 
    android:id="@+id/map" 
    android:layout_below="@+id/textView6" 
    android:layout_alignParentLeft="true" 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="19dp" 
    android:layout_marginStart="19dp" 

Dies ist der Fehler

jedes Mal, bevor die Aktivität crashes-
Process: com.gjs.finalproject, PID: 5571 
              android.view.InflateException: Binary XML file line #30: Error inflating class fragment 
               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:767) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:810) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
               at android.view.LayoutInflater.inflate(LayoutInflater.java:508) 
               at android.view.LayoutInflater.inflate(LayoutInflater.java:418) 
               at com.gjs.finalproject.HomeFragment.About2Fragment.onCreateView(About2Fragment.java:64) 
               at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
               at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
               at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1468) 
               at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:791) 
               at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638) 
               at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) 
               at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
               at android.support.v4.view.ViewPager.populate(ViewPager.java:1240) 
               at android.support.v4.view.ViewPager.populate(ViewPager.java:1088) 
               at android.support.v4.view.ViewPager$3.run(ViewPager.java:275) 
               at android.view.Choreographer$CallbackRecord.run(Choreographer.java:775) 
               at android.view.Choreographer.doCallbacks(Choreographer.java:588) 
               at android.view.Choreographer.doFrame(Choreographer.java:557) 
               at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:761) 
               at android.os.Handler.handleCallback(Handler.java:739) 
               at android.os.Handler.dispatchMessage(Handler.java:95) 
               at android.os.Looper.loop(Looper.java:135) 
               at android.app.ActivityThread.main(ActivityThread.java:5276) 
               at java.lang.reflect.Method.invoke(Native Method) 
               at java.lang.reflect.Method.invoke(Method.java:372) 
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) 
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
               Caused by: java.lang.IllegalArgumentException: Binary XML file line #30: Duplicate id 0x7f0e009f, tag null, or parent id 0x7f0e009d with another fragment for com.google.android.gms.maps.SupportMapFragment 
               at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2422) 
               at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
               at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177) 
               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:729) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)  
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)  
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)  
               at android.view.LayoutInflater.inflate(LayoutInflater.java:508)  
               at android.view.LayoutInflater.inflate(LayoutInflater.java:418)  
               at com.gjs.finalproject.HomeFragment.About2Fragment.onCreateView(About2Fragment.java:64)  
               at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)  
               at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)  
               at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1468)  
               at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:791)  
               at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638)  
               at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)  
               at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)  
               at android.support.v4.view.ViewPager.populate(ViewPager.java:1240)  
               at android.support.v4.view.ViewPager.populate(ViewPager.java:1088)  
               at android.support.v4.view.ViewPager$3.run(ViewPager.java:275)  
               at android.view.Choreographer$CallbackRecord.run(Choreographer.java:775)  
               at android.view.Choreographer.doCallbacks(Choreographer.java:588)  
               at android.view.Choreographer.doFrame(Choreographer.java:557)  
               at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:761)  
               at android.os.Handler.handleCallback(Handler.java:739)  
               at android.os.Handler.dispatchMessage(Handler.java:95)  
               at android.os.Looper.loop(Looper.java:135)  
               at android.app.ActivityThread.main(ActivityThread.java:5276)  
               at java.lang.reflect.Method.invoke(Native Method)  
               at java.lang.reflect.Method.invoke(Method.java:372)  
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)  
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)  

Hier ist mein Fragment Code

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
     mapFragment = ((SupportMapFragment) getChildFragmentManager() 
       .findFragmentById(R.id.map)); 
     mapFragment.getMapAsync(this); 
} 


@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mapFragment != null) { 
     //mMap = null; 
     mapFragment=null; 
     } 
    } 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    //Toast.makeText(getActivity(), lat + " " + lng, Toast.LENGTH_LONG).show(); 

    LatLng locations = new LatLng(Util.reslatitude,Util.reslogitide); 

    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     return; 
    } 
    mMap.setMyLocationEnabled(true); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(locations, 13)); 

    mMap.addMarker(new MarkerOptions() 
      .title("abc") 

      .position(locations)); 
} 

Vielen Dank im Voraus

+0

Können Sie Ihre Logcat-Ausgabe veröffentlichen? – nurisezgin

+0

beziehen Sie sich mit Android: Klasse – Qamar

+0

teilen Sie Ihre Fragment-Code, der die Karte hat –

Antwort

1

Anstatt initialisieren Ihre MapFragment in onActivityCreated es sollte auf onCreateView initialisieren

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

      mapFragment = ((SupportMapFragment) getChildFragmentManager() 
        .findFragmentById(R.id.map)); 
      mapFragment.getMapAsync(this); 
     } 

Und Ihre onActivityCreated

sein
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
} 

den folgenden Code hinzufügen, lassen Sie mich wissen, ob es

@Override 
    public void onPause() { 
     super.onPause(); 

     getChildFragmentManager().beginTransaction() 
       .remove(mapFragment) 
       .commit(); 
    } 
arbeitet
+1

@Gsingh überprüfen Sie meine bearbeitete Antwort –

+0

keine Wirkung gleichen Fehler – Gsingh

+0

Wie hast du das Fragment? Ich meine, hast du ersetzt oder hinzugefügt. Ich schlage vor, dass Sie das Fragment wie folgt starten getSupportFragmentManager(). BeginTransaction() .replace (R.id.container, new MapFragment(), "MapFragment") .commit(); –

0

I Statt Kartenfragment versuchen Sie MapView in Ihrem ersten Fragment zu verwenden.

Verwandte Themen