使用RelativeLayout作为自定义InfoWindow时的NullPointerException

我试图使用RelativeLayout作为自定义的InfoWindow为我的标记,但我每次调用showInfoWindow (通过点击Marker或编程)我得到一个NullPointerException showInfoWindow 。 我正在使用Google Maps Android API v2。

例外:

 FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:465) at android.view.View.measure(View.java:15172) at maps.ayi(Unknown Source) at maps.aya(Unknown Source) at maps.awa(Unknown Source) at maps.a.bd.a(Unknown Source) at maps.y.bw.b(Unknown Source) at maps.y.bw.a(Unknown Source) at maps.a.dh.a(Unknown Source) at maps.anc(Unknown Source) at maps.a.dw.a(Unknown Source) at maps.a.bd.c(Unknown Source) at maps.a.dq.onSingleTapConfirmed(Unknown Source) at maps.evonSingleTapConfirmed(Unknown Source) at maps.ejhandleMessage(Unknown Source) ... 

我的代码:

* custom_infowindow.xml *

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dip" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:src="@drawable/icon" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@id/icon" android:ellipsize="end" android:paddingLeft="10dip" android:paddingRight="10dip" android:singleLine="true" /> <TextView android:id="@+id/snippet" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/title" android:layout_toLeftOf="@id/icon" android:ellipsize="end" android:paddingBottom="10dip" android:paddingLeft="10dip" android:paddingRight="10dip" android:singleLine="true" /> </RelativeLayout> 

CustomInfoWindowAdapter.java

 public class CustomInfoWindowAdapter implements InfoWindowAdapter { private View layout; private LayoutInflater inflater; public CustomInfoWindowAdapter(Context context) { inflater = LayoutInflater.from(context); } @Override public View getInfoContents(Marker marker) { return null; } @Override public View getInfoWindow(Marker marker) { ViewHolder holder; if (layout == null) { layout = inflater.inflate(R.layout.custom_infowindow, null); holder = new ViewHolder(); holder.title = (TextView) layout.findViewById(R.id.title); holder.snippet = (TextView) layout.findViewById(R.id.snippet); layout.setTag(holder); } else { holder = (ViewHolder) layout.getTag(); } holder.title.setText(marker.getTitle()); holder.snippet.setText(marker.getSnippet()); return layout; } static class ViewHolder { TextView title; TextView snippet; } } 

有趣的是,如果我使用LinearLayout而不是它工作得很好,但我宁愿只使用一个ViewGroup如果可能的话。 当然,我想知道那个onMeasure抛出一个NullPointerException

编辑:此外,包装在一个FrameLayoutLinearLayoutRelativeLayout将工作。 当然,将其包装在另一个RelativeLayout不会。

Solutions Collecting From Web of "使用RelativeLayout作为自定义InfoWindow时的NullPointerException"

我有这个问题,并能够通过添加解决它

 view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,desiredHeight)); 

从InfoWindowAdapter.getInfoWindow返回之前的视图

刚刚发现,在Android版本<4.4这产生了一个空指针exception。 使用线性更改布局将解决问题。

即使在我的xml中没有RelativeLayout,我也遇到过这个问题。 事实certificate,我的类支持从RelativeLayoutinheritance的XML,即使它是一个LinearLayout。

它不会导致几个不同的设备的错误,但是当我尝试我的S3时,它坠毁。

无论如何,只要删除或包裹RelativeLayout或首先设置布局的高度/宽度。