如何使InfoWindow中的CheckBox正确或错误

时间:2019-04-04 11:47:18

标签: java android google-maps checkbox google-maps-markers

我正在使用自定义InfoWindowAdapter,以便对数据使用Marker InfoWindow布局。 每个Marker对象都关联了一个AnimalMarker对象(存储在HashMap中)

尽管没有打印任何错误,但复选框不会更新,并且Log.d(..)将打印应该在复选框中的布尔值。

我是否在做某些错误的事情,或者我不知道有关InfoWindows中的CheckBoxes?

我的MapActivity中的代码


mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
                @Override
                public View getInfoWindow(Marker marker) {
                    View view = getLayoutInflater().inflate(R.layout.marker_info_window, null);
                    AnimalMarker animalMarker = allMarkersHashMap.get(marker);
                    if (animalMarker == null) {
                        animalMarker = myMarkersHashMap.get(marker);
                    }
                    Log.d(TAG, "getInfoWindow: animalMarker --> " + animalMarker);

                    TextView miwLocation = (TextView) view.findViewById(R.id.miwLocation);
                    TextView miwAnimalName = (TextView) view.findViewById(R.id.miwAnimalName);
                    TextView miwAnimalAge = (TextView) view.findViewById(R.id.miwAnimalAge);
                    ImageView miwImage = (ImageView) view.findViewById(R.id.miwImage);
                    CheckBox miwAdultCB = (CheckBox) view.findViewById(R.id.miwAdultCB);
                    CheckBox miwNeuteredCB = (CheckBox) view.findViewById(R.id.miwNeuteredCB);

                    miwLocation.setText(marker.getTitle());
                    miwAnimalName.setText(animalMarker.getAnimal().getAnimalName());
                    miwAnimalAge.setText(animalMarker.getAnimal().getAproxAge().toString() + " yrs");



              miwAdultCB.setChecked(animalMarker.getAnimal().isAdult());
                    Log.d(TAG, "getInfoWindow: made AdultCB = " + animalMarker.getAnimal().isAdult());
              miwNeuteredCB.setChecked(animalMarker.getAnimal().isNeutered());


                    switch (animalMarker.getAnimal().getSpecies()) {
                        case "dog":
                            miwImage.setImageResource(R.drawable.dog_icon);
                            break;
                        case "cat":
                            miwImage.setImageResource(R.drawable.cat_icon);
                            break;
                        default:
                            miwImage.setImageResource(R.drawable.cat_icon);
                    }

                    return view;
                }

                @Override
                public View getInfoContents(Marker marker) {
                    return null;
                }
            });



R.layout.marker_info_window:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/white_border"
    android:orientation="horizontal"
    android:padding="10dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/miwLocation"
            android:layout_centerHorizontal="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="5dp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="miwLocation"
            android:textColor="#000000"
            android:textSize="15sp"
            android:textStyle="bold" />

        <ImageView
            android:src="@drawable/dog_icon"
            android:id="@+id/miwImage"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_below="@+id/miwLocation"
            android:layout_alignParentStart="true"
            android:layout_marginStart="18dp"
            android:layout_marginTop="3dp" />

        <TextView
            android:id="@+id/miwAnimalName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/miwLocation"
            android:layout_marginStart="30dp"
            android:layout_marginTop="7dp"
            android:layout_toEndOf="@+id/miwImage"
            android:layout_toRightOf="@id/miwImage"
            android:ellipsize="end"
            android:maxLines="2"
            android:textStyle="bold"
            android:text="miwAnimalName"
            android:textColor="#000000"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/miwAnimalAge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/miwLocation"
            android:layout_marginStart="20dp"
            android:layout_marginTop="7dp"
            android:layout_toRightOf="@id/miwAnimalName"
            android:text="3 yrs"
            android:textStyle="bold"
            android:textColor="#000000"
            android:textSize="15sp" />

        <CheckBox
            android:id="@+id/miwAdultCB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/miwAnimalName"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="8dp"
            android:layout_toRightOf="@id/miwImage"
            android:text=" Adult"
            android:textSize="18dp"

            android:clickable="false"/>

        <CheckBox
            android:id="@+id/miwNeuteredCB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/miwAnimalName"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="8dp"
            android:layout_toRightOf="@id/miwAdultCB"
            android:text=" Neutered"
            android:textSize="18dp"
            android:clickable="false"/>

    </RelativeLayout>

</LinearLayout>


布局设计和生成的InfoWindow的图像:

Imgur Imgur

1 个答案:

答案 0 :(得分:0)

这可能有点晚了,但是如here所述:

绘制的信息窗口不是实时视图。该视图在返回时呈现为图像(使用View.draw(Canvas))。这意味着对视图的任何后续更改都不会在地图上的信息窗口中反映出来。要稍后更新信息窗口(例如,在加载图像之后),请调用showInfoWindow()。此外,信息窗口将不考虑正常视图的任何交互性,例如触摸或手势事件。但是,您可以按照以下部分中的说明在整个信息窗口上监听一般的click事件。