Пользовательская кнопка InfoWindow Google Map v2 для Android?

Привет, я хочу добавить информационное окно маркера на мою карту Google в приложении для Android. Пока у меня есть пользовательское информационное окно, в котором есть изображение и кнопка. Моя цель после нажатия на маркер, затем показать информационное окно, а затем после того, как пользователь нажмет кнопку Кнопка в окне закрывает информационное окно и выполняет некоторые действия после нажатия кнопки. Но я не могу определить, когда пользователь нажимает кнопку в информационном окне маркера. Это мой код. Пожалуйста, скажите мне, где не так в моем коде.

googleMap.setInfoWindowAdapter(new InfoWindowAdapter() {

                // Use default InfoWindow frame
                @Override
                public View getInfoWindow(Marker arg0) {
                    return null;
                }

                // Defines the contents of the InfoWindow
                @Override
                public View getInfoContents(Marker arg0) {



                    final View infoview = getLayoutInflater().inflate(R.layout.info_window,
                            null);

                    LatLng latLng = arg0.getPosition();                 

                    //tvLat.setText("Latitude:" + latLng.latitude);

                    //tvLng.setText("Longitude:" + latLng.longitude);

                     Button pickMe = (Button)infoview.findViewById(R.id.pickme);
                     pickMe.setOnClickListener(new Button.OnClickListener(){

                            @Override
                            public void onClick(View v) {
                                // TODO Auto-generated method stub
                                Toast.makeText(getApplicationContext(), "Requested Send", Toast.LENGTH_SHORT).show();

                            }});


                    //String reverceGeoCode=new GetLocationAddress().getAddress(String.valueOf(latLng.latitude), String.valueOf(latLng.longitude));
                    //Toast.makeText(getApplicationContext(), "Rev :"+reverceGeoCode, Toast.LENGTH_LONG).show();

                    return infoview;

                }
            });

И это мой XML-файл customInfo-window

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"   
     >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Sajith Vijesekara"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         android:orientation="horizontal"
         android:layout_marginLeft="5dp"
         android:layout_marginTop="5dp"
         android:layout_marginBottom="5dp">
         <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight=".25"
        android:src="@drawable/driver" />

    <Button
        android:id="@+id/pickme"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight=".25"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="10dp"
        android:text="Pick Me" />

    </LinearLayout>   

</LinearLayout>

Спасибо, Саджит.


person Sajith Vijesekara    schedule 31.07.2014    source источник


Ответы (2)


Цитирование документации:

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

Следовательно, вы не можете узнать, когда кто-то нажимает на Button в вашем информационном окне. Вы можете отвечать на клики в любом месте в информационном окне. однако.

person CommonsWare    schedule 31.07.2014
comment
Спасибо за быстрый ответ. Итак, если кнопка не может быть помещена в окно. Возможно ли определить событие, когда пользователь нажимает на информационное окно, а не на кнопку. - person Sajith Vijesekara; 31.07.2014
comment
@Sajith4U: Да. В своем последнем предложении я включил ссылку на документацию, в которой объясняется, как использовать setOnInfoWindowClickListener() для этого. Вот пример проекта, демонстрирующий его использование: github.com/commonsguy/cw -omnibus/tree/master/MapsV2/Всплывающие окна - person CommonsWare; 31.07.2014
comment
Спасибо, это то, что я хотел. Вы сэкономили мое время. Приятного кодирования. - person Sajith Vijesekara; 31.07.2014

Кто-то написал библиотеку для решения этой проблемы

https://github.com/Appolica/InteractiveInfoWindowAndroid

InteractiveInfoWindowAndroid — это библиотека Android, которая дает вам возможность отображать интерактивные информационные окна на вашей карте Google. Пользовательский интерфейс вашего окна инкапсулирован в ваш собственный фрагмент с собственным жизненным циклом. Вы просто передаете его в InfoWindowManager и отображаете над любым маркером, который хотите.

person Barry MSIH    schedule 13.11.2016