Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NullPointerException when using RelativeLayout as custom InfoWindow

Tags:

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.

like image 716
mbarrben Avatar asked Dec 24 '12 16:12

mbarrben


1 Answers

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

like image 92
ootinii Avatar answered Apr 28 '23 03:04

ootinii