I'm trying to use a RelativeLayout
as custom InfoWindow
for my markers, but a I get a NullPointerException
every time showInfoWindow
is called (via tapping on a Marker
or programmatically). I'm using Google Maps Android API v2.
Exception:
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) ...
My code:
*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; } }
Funny thing is that if I use LinearLayout
instead it works just fine, but I'd rather use only one ViewGroup
if possible. And of course I would like to know what happens with that onMeasure
throwing a NullPointerException
.
EDIT: Also, wrapping the RelativeLayout
inside a FrameLayout
or a LinearLayout
will work. Wrapping it inside another RelativeLayout
won't, of course.
I had this problem and was able to fix it by adding
view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,desiredHeight));
to the view before returning it from InfoWindowAdapter.getInfoWindow
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With