Я пытаюсь использовать RelativeLayout как пользовательский InfoWindow для своих маркеров, но я получаю NullPointerException каждый раз, когда вызывается showInfoWindow (через нажатие на Marker или программно). Я использую 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.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, бросая a NullPointerException.
РЕДАКТИРОВАТЬ: Кроме того, обертка RelativeLayout внутри a FrameLayout или LinearLayout будет работать. Разумеется, обертка его внутри другого RelativeLayout не будет.