【问题标题】:Map Fragment crash while changing navigation更改导航时地图片段崩溃
【发布时间】:2014-01-24 15:09:15
【问题描述】:

我有一个导航抽屉,其中地图是其他项目中的一个选项。当我单击我的地图时,它可以工作。如果我去其他导航抽屉项目并再次返回地图,它会崩溃。谁能告诉我原因??

这里是代码..

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

【问题讨论】:

  • 你也可以发布xml文件吗?

标签: android android-maps-v2 supportmapfragment


【解决方案1】:

问题是,一旦您导航到另一个选项卡,该选项卡不是包含地图的选项卡的邻居选项卡,视图就会被破坏。这会从您的堆栈跟踪中生成以下行:

二进制 XML 文件第 3 行:重复 id 0x7f050011, 标记 null,或父 id 0x0 与另一个片段 com.google.android.gms.maps.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;
}

【讨论】:

  • 很高兴听到这个消息 :) 你能把它标记为最佳答案吗?
  • 你是救生员@Martin
  • @MartinGolpashin 谢谢你的解决方案,但是当我从fragment Afragment B 然后返回fragment A 并再次返回fragment B 时出现错误,fragment B 丢失,你能告诉我为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
相关资源
最近更新 更多