当使用RelativeLayout的自定义信息窗口的NullPointerException(Nul

2019-07-17 13:42发布

我试图用一个RelativeLayout自定义InfoWindow为我的标记,但我得到一个NullPointerException每次showInfoWindow被称为(通过敲击一个Marker或编程)。 我使用谷歌地图API的Android 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抛出一个NullPointerException

编辑:另外,包裹RelativeLayout一个内部FrameLayoutLinearLayout会工作。 结束语另一个里面RelativeLayout当然不会的。

Answer 1:

我有这个问题,并能够通过添加修复它

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

该视图从InfoWindowAdapter.getInfoWindow返回之前



Answer 2:

刚刚发现,在Android版本<4.4这个生成空指针异常。 有一个线性布局变更就能解决问题。



Answer 3:

我遇到过这个问题,即使我没有在我的XML一个RelativeLayout的。 事实证明,我的支持类XML从RelativeLayout的继承,即使它是一个LinearLayout中。

它没有造成错误几个不同的设备,但是当我试图在我的S3坠毁。

反正,只是删除或包裹的RelativeLayout或第一组的布局的高度/宽度。



文章来源: NullPointerException when using RelativeLayout as custom InfoWindow