Добавление кнопки в пользовательский вид InfoWindowAdapter, который может регистрировать клики

Я добавляю InfoWindowAdapter с настраиваемым макетом к фрагменту карты на основе Android Google Maps API v2. Я положил кнопку в представлении, которое я возвращаю из getInfoWindow(), и пока он отображается отлично, когда я нажимаю на указанную кнопку, само окно регистрирует щелчок (мигание с желтоватым оттенком, как обычно), в то время как кнопка не работает.

Как я могу сделать кнопку в информационном окне "clickable"? И, в дополнение, любое представление внутри информационного окна?

Ответ 1

Вместо этого прослушивайте события маркерного щелчка с помощью OnMarkerClickListener и сразу показывайте свой собственный полный просмотр. Однако может быть немного больше работы, чтобы привязать его к местоположению маркера. Попробуйте PopupWindow с showAtLocation (просмотр родительского, int gravity, int x, int y)

Ответ 2

Пока вы можете установить информационное окно как произвольное представление с помощью GoogleMap.setInfoWindowAdapter(), информационное окно, отображаемое на карте, не является живым. Вместо этого это снимок представления во время отображения представления адаптером (см. здесь). Таким образом, к сожалению, он не ведет себя как стандартный вид, когда он помещен на карту.

Ответ 3

Возможно, вы можете настроить AlartDialog в InfoWindowClickListener для переключения события

map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {          
        public void onInfoWindowClick(Marker marker) {
            String[] items={"onefunction","twofunction"};
            AlertDialog.Builder itemDilog = new AlertDialog.Builder(context);
            itemDilog.setTitle("");
            itemDilog.setCancelable(false);
            itemDilog.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    switch(which){
                    case 0:{
                            onefunction();
                            }break;
                    case 1:{
                            twofunction();
                            }break; 
                    }

                }
            });
            itemDilog.show();

        }
    });