22

マーカーのRelativeLayoutカスタムとしてを使用しようとしていますが、毎回呼び出される (または プログラムでタップすることにより) を取得します。Google Maps Android API v2 を使用しています。InfoWindowNullPointerExceptionshowInfoWindowMarker

例外:

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可能であれば 1 つだけを使用したいと考えています。onMeasureそしてもちろん、 を投げるとどうなるか知りたいNullPointerExceptionです。

編集: また、 aまたは aのRelativeLayout内側をラップしても機能します。もちろん、それを別の中にラップすることはできません。FrameLayoutLinearLayoutRelativeLayout

4

3 に答える 3

27

この問題があり、追加することで修正できました

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

InfoWindowAdapter.getInfoWindow から返す前にビューに

于 2013-04-01T19:58:12.093 に答える
24

Androidバージョン<4.4では、これによりnullpointer例外が生成されることがわかりました。Linear でレイアウトを変更すると、問題が解決します。

于 2014-05-20T13:19:36.020 に答える
4

XML に RelativeLayout がない場合でも、この問題が発生しました。XML をサポートするクラスは、LinearLayout であったにもかかわらず、RelativeLayout から継承されていることがわかりました。

いくつかの異なるデバイスではバグは発生しませんでしたが、S3 で試してみるとクラッシュしました。

とにかく、 RelativeLayout を削除またはラップするか、最初にレイアウトの高さ/幅を設定してください。

于 2014-07-15T19:41:07.700 に答える