在不同的标记上设置 onMarkerClickListener

Setting onMarkerClickListener on different markers

我想设置不同Marker的OnMarkerClickListener。在这里,我想在单击相应标记时打印 i 循环 的变量值。所以我按照以下方式做了..但它不起作用,它在每次不同的标记点击时在 Snackbar 上显示相同的最后一个循环值 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 相同的值

要解决您的问题,您应该有一个标记数组。

试试这个:

首先让你的应用实现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;
}

我找到了一种方法...

        @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;
        }
    });
    }