NullPointerException при использовании RelativeLayout как пользовательский InfoWindow

Я пытаюсь использовать RelativeLayout как пользовательский InfoWindow для своих маркеров, но я получаю showInfoWindow NullPointerException каждый раз, showInfoWindow вызывается 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.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 бросающим onMeasure NullPointerException .

EDIT: Кроме того, будет работать RelativeLayout внутри FrameLayout или LinearLayout . Разумеется, обертывание его внутри другого RelativeLayout не будет.

Solutions Collecting From Web of "NullPointerException при использовании RelativeLayout как пользовательский InfoWindow"

У меня была эта проблема, и я смог ее исправить, добавив

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

К представлению перед возвратом его из InfoWindowAdapter.getInfoWindow

Просто выяснилось, что в версии для Android версии <4.4 это генерирует исключение nullpointer. Изменение макета с помощью линейного решения проблемы.

Я испытал эту проблему, даже когда у меня не было RelativeLayout в моем xml. Оказывается, мой класс поддерживает XML, унаследованный от RelativeLayout, хотя это был LinearLayout.

Это не вызвало ошибку для нескольких разных устройств, но когда я попытался на моем S3, он разбился.

В любом случае, просто удалите или оберните RelativeLayout или сначала установите высоту / ширину макета.