我试图用一个RelativeLayout
自定义InfoWindow
为我的标记,但我得到一个NullPointerException
每次showInfoWindow
被称为(通过敲击一个Marker
或编程)。 我使用谷歌地图API的Android 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.a.y.i(Unknown Source)
at maps.a.y.a(Unknown Source)
at maps.a.w.a(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.a.n.c(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.e.v.onSingleTapConfirmed(Unknown Source)
at maps.e.j.handleMessage(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
。
编辑:另外,包裹RelativeLayout
一个内部FrameLayout
或LinearLayout
会工作。 结束语另一个里面RelativeLayout
当然不会的。