Настройка onMarkerClickListener на разных маркерах

Я хочу установить OnMarkerClickListener разных маркеров. Здесь я хочу напечатать i значение переменной цикла всякий раз, когда будет нажат соответствующий маркер. Итак, я сделал следующим образом.. но он не работает, он отображает одно и то же последнее значение 170 цикла на снэкбаре при каждом щелчке маркера.. Но я полагаю, чтобы получить 0,10,20, 30....170 соответственно в забегаловке по разным маркерам щелкнуть.

Пожалуйста помоги...

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;



        // SETTING MARKER
        for(int i=0;i<180;i=i+10) {
            LatLng sydney = new LatLng(i, i);
            mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Position"+i));

            //ON MARKER CLICK
            final int finalI = i;

            mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

                @Override
                public boolean onMarkerClick(Marker marker) {
                    Snackbar.make((View) findViewById(R.id.map),""+finalI,Snackbar.LENGTH_LONG).show();
                    return true;
                }
            });
        }
}

Вот маркер, который был создан циклом, но я получаю то же значение до 170

введите здесь описание изображения


person Abhishek Sahay    schedule 19.06.2017    source источник


Ответы (2)


Чтобы решить вашу проблему, у вас должен быть массив маркеров.

Попробуй это:

Сначала сделайте свое приложение для реализации GoogleMap.OnMarkerClickListener. Затем создайте массив маркеров:

Marker[] marker = new Marker[20]; //change length of array according to you

затем внутри

onMapReady(){
mMap.setOnMarkerClickListener(this);
 for(int i=0;i<180;i=i+10) {
            LatLng sydney = new LatLng(i, i);
            marker[i] = mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Position"+i));


        }
}

затем, наконец

     @Override
    public boolean onMarkerClick(Marker marker) {
   //you can get assests of the clicked marker
   return false;
}
person sumit    schedule 19.06.2017

Я нашел один способ...

        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;

            // SETTING MARKER
            for(int i=0;i<180;i=i+10) {
                LatLng sydney = new LatLng(i, i);
                mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Position"+i));

                }

        //ON MARKER CLICK
        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

        @Override
        public boolean onMarkerClick(Marker marker) {
            for(int i=0;i<180;i=i+10) {
                if (marker.getTitle().equals("Marker in Position" + i))
                    Snackbar.make((View) findViewById(R.id.map), "" + i, Snackbar.LENGTH_LONG).show();

            }return true;
        }
    });
    }
person Abhishek Sahay    schedule 19.06.2017