2014-01-24 53 views
2

我有一個導航抽屜,其中Map是其他項目中的一個選項。當我點擊我的地圖時,它可以工作。如果我再次進入其他導航抽屜項目並返回到Map,則會崩潰。任何人都可以告訴我的原因?地圖片段在更改導航時崩潰

這裏是代碼..

public class Map extends Fragment { 
private GoogleMap mMap; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.map, container, false); 
    setUpMapIfNeeded(); 

    return view; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    setUpMapIfNeeded(); 
} 

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

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

private void setUpMapIfNeeded() { 

    if (mMap == null) { 

     FragmentManager fm = getFragmentManager(); 
     mMap = ((SupportMapFragment) fm.findFragmentById(R.id.map)) 
       .getMap(); 
     if (mMap != null) { 
      setUpMap(); 
     } 
    } 
} 

private void setUpMap() { 
    LatLng latlang = new LatLng(53.0847558, 8.8208279); 

    mMap.addMarker(new MarkerOptions().position(latlang).title("Marker")); 

    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlang, 15)); 

    mMap.animateCamera(CameraUpdateFactory.zoomTo(14), 2000, null); 
}} 

這是XML

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

,這裏是我的錯誤日誌消息

01-24 16:00:16.335: E/AndroidRuntime(17656): FATAL EXCEPTION: main 
01-24 16:00:16.335: E/AndroidRuntime(17656): android.view.InflateException: Binary 
XML file line #3: Error inflating class fragment 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
de.apps28.com.Map.onCreateView(Map.java:27) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 

01-24 16:00:16.335: E/AndroidRuntime(17656): Caused by:  
java.lang.IllegalArgumentException: Binary XML file line #3: Duplicate id 0x7f050011, 
tag null, or parent id 0x0 with another fragment for 
com.google.android.gms.maps.SupportMapFragment 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:296) 
01-24 16:00:16.335: E/AndroidRuntime(17656): at 
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 
01-24 16:00:16.335: E/AndroidRuntime(17656): ... 18 more 
+0

你也可以發佈xml文件嗎? –

回答

6

的問題是,鑑於被摧毀一旦您導航到另一個不是包含地圖的選項卡的鄰居選項卡。這導致從您的堆棧跟蹤以下行:

二進制XML文件行#3:重複的ID 0x7f050011, 標籤無效,或與 com.google.android.gms.maps另一個片段父ID爲0x0。 SupportMapFragment

所以你試圖重新創建地圖。更好的解決方案是在視圖被破壞之前保存視圖

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle  savedInstanceState) { 
if (view != null) { 
    ViewGroup parent = (ViewGroup) view.getParent(); 
    if (parent != null) 
     parent.removeView(view); 
} 
try { 
    view = inflater.inflate(R.layout.map, container, false); 
} catch (InflateException e) { 
    /* map is already there, just return view as it is */ 
} 
return view; 
} 
+0

您的反饋幫助我解決了問題 – muktoshuvro

+1

很高興能聽到:)你能將它標記爲最佳答案嗎? –

+0

@Martin – BiLL