我正在使用自定义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的图像:
答案 0 :(得分:0)
这可能有点晚了,但是如here所述:
绘制的信息窗口不是实时视图。该视图在返回时呈现为图像(使用View.draw(Canvas))。这意味着对视图的任何后续更改都不会在地图上的信息窗口中反映出来。要稍后更新信息窗口(例如,在加载图像之后),请调用showInfoWindow()。此外,信息窗口将不考虑正常视图的任何交互性,例如触摸或手势事件。但是,您可以按照以下部分中的说明在整个信息窗口上监听一般的click事件。