2016-01-29 10 views
0

Я реализую карты Google в своем приложении. Мое требование состоит в том, чтобы отображать пользовательскую инфоиндексацию при нажатии маркера.Android-карта - внутреннее информационное окно ListView - не получает событие click

My customWindow содержит список, и мне нужно выполнить некоторую операцию на основе щелкнутого элемента.

Я получаю событие щелчка целиком infoWindow (используя OnInfoWindowClickListener), но проблема в том, что я не получаю событие click для просмотра списка внутри infoWindow.

Согласно описанию here

Примечание: информационное окно, которое обращено не живой вид. Представление отображается как изображение (используя View.draw (Canvas)) во время его возврата. Это означает, что любые последующие изменения в представлении не будут отображаться информационным окном на карте. Чтобы обновить информационное окно позже (например, после загрузки изображения), вызовите showInfoWindow(). Кроме того, информационное окно не будет учитывать какую-либо интерактивность, характерную для обычного вида, такого как события касания или жестов. Однако вы можете прослушивать общий клик по всему информационному окну, как описано в разделе ниже.

Итак, есть ли способ, с помощью которого я могу получить событие щелчка каждого щелкнутого элемента внутри пользовательского информационного окна?

Скриншот: enter image description here

+0

разместить свой код. –

+0

использовать пользовательский адаптер, внутри пользовательского адаптера метод getview вы можете добавлять макеты и список и т. Д. googleMap.setInfoWindowAdapter (новый MyCustomAdapterForItems()); ваш адаптер реализует GoogleMap.InfoWindowAdapter как публичный класс MyCustomAdapterForItems реализует GoogleMap.InfoWindowAdapter { } –

+0

Все еще его не работает :-( – Buddy

ответ

0

Лучший подход, вероятно, окружив карту в макете. Где вы будете устанавливать прослушиватель, чтобы коснуться evetns, а затем распространить события на сохраненный экземпляр Infowindows View.

См Ответ: https://stackoverflow.com/a/15040761/838424

Это работает для кнопок, но с неизвестным причинам он не работает для ListView (но щелкает в ListView распространяются).

Обновление: щелкает не распространяются на предметы из-за функции isAttachedToWindow возвращает ложные (в AbsListView.onTouchEvent). Какой блокирует обработку события click.

Обход является использование кода в обертку на dispatchTouchEvent

INT = myListView.pointToPosition поз ((INT) copyEv.getX(), (INT) copyEv.getY());

мой полный обходной путь:

if (copyEv.getX() >= 0 && copyEv.getY() >= 0 
       && copyEv.getX() < infoWindow.getWidth() 
       && copyEv.getY() < infoWindow.getHeight()) 
     { 
      // event is inside infoWindow 
      final int actionMasked = ev.getActionMasked(); 
      switch (actionMasked) { 
       case MotionEvent.ACTION_DOWN: 
        int pos = vItems.pointToPosition((int)copyEv.getX(), (int)copyEv.getY()); 
        if (pos >= 0) { 
         vItems.performItemClick(infoWindow, pos, 0); 
         ret = true; 
        } 
        break; 
       case MotionEvent.ACTION_UP: { 
        break; 
       } 
      } 
     }