将RelativeLayout用作自定义InfoWindow时出现NullPointerException

mba*_*ben 22 android google-maps nullpointerexception google-maps-android-api-2

我正在尝试使用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)
    ...
Run Code Online (Sandbox Code Playgroud)

我的代码:

*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>
Run Code Online (Sandbox Code Playgroud)

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我使用LinearLayout它而工作得很好,但ViewGroup如果可能,我宁愿只使用一个.当然,我想知道onMeasure抛出一个会发生什么NullPointerException.

编辑:此外,包裹RelativeLayout内部a FrameLayout或a LinearLayout将工作.RelativeLayout当然,把它包装在另一个里面也不会.

oot*_*nii 27

我有这个问题,并能够通过添加来解决它

view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,desiredHeight));
Run Code Online (Sandbox Code Playgroud)

从InfoWindowAdapter.getInfoWindow返回之前到视图


小智 24

刚刚发现在android版本<4.4中,这会产生一个nullpointer异常.使用Linear改变布局将解决问题.