第二次调用时,inflater.inflate会导致NullPointerException

时间:2013-09-06 12:05:46

标签: android tabs nullpointerexception google-maps-api-2

我有以下布局。让我们称之为mapFragment.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/fragmentId"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      class="com.google.android.gms.maps.SupportMapFragment"
      android:orientation="vertical">

   <com.google.android.gms.maps.MapView
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/mapIdfragmentId"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

</fragment>

它用于选项卡视图。这是3的第一个选项卡。加载选项卡视图时,这是第一个加载的选项卡。这里没问题。如果我去第二个标签然后再回去 - 我再也没有问题。但是,如果我转到第三个选项卡并尝试返回(无论第二个或第一个选项卡)然后我在第一个选项卡的onCreate方法中有一个NPE

   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     super.onCreateView(inflater, container, savedInstanceState);
     View v = inflater.inflate(R.layout.mapFragment, container, false);
     return v;
   }

NPE发生在第二行 - 查看v = .... 该异常的根本原因是

 Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f040005, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
 E/AndroidRuntime(17423):    at android.app.Activity.onCreateView(Activity.java:4722)

我正在使用Sherlock库,设备在Android v2.2.2上运行

PS:这里建议的解决方案 - Duplicate ID, tag null, or parent id with another fragment for com.google.android.gms.maps.MapFragment修复了问题,但之后地图完全冻结了:(

2 个答案:

答案 0 :(得分:1)

更改为

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 View v = inflater.inflate(R.layout.mapFragment, container, false);
 return v;
}

你没有返回夸大的视图。

此外,如果您使用的是map api v1,则不推荐使用。切换到api v2

https://developers.google.com/maps/documentation/android/

答案 1 :(得分:0)

你走错了路线

从xml中删除

 <com.google.android.gms.maps.MapView
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/mapIdfragmentId"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

因为这个Fragment包含map本身就是为什么它会抛出重复错误

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