【问题标题】:onClick Listener Inside Loop Android Studio map markeronClick Listener Inside Loop Android Studio 地图标记
【发布时间】:2015-10-24 08:19:16
【问题描述】:

单击 infoWindow 时,每次单击都会传递相同的“currentStall”。 它必须只创建一个单击侦听器实例。 'currentStall' 将唯一标识符传递给单击的位置,但仅传递数组中的最后一个标识符,而不传递每个单独的标识符。

Iterator<Stall> iter = stalls.listIterator();
            while (iter.hasNext()) {
                final Stall currentStall = iter.next();

                String stallId = currentStall.getId().get$Oid();
                Double x = currentStall.getLocation().getCoordinates().get(0);
                Double y = currentStall.getLocation().getCoordinates().get(1);
                final String myName = currentStall.getName();
                addCircle(new LatLng(y, x), currentStall.getRadius(), 0);

                LatLng CIU = new LatLng(y, x);

                Marker cmumarker;
                cmumarker = mMap.addMarker(new MarkerOptions()
                        .position(CIU)
                        .title(myName)
                        .flat(true)
                        .snippet(currentStall.getId().get$Oid()));
                cmumarker.showInfoWindow();

                mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener(){
                    @Override
                    public void onInfoWindowClick(Marker cmumarker){
                        //Intent intent = new Intent(MainActivity.this,AdminActivity.class);
                        //startActivity(intent);
                        Intent intent = new Intent("life.stall.StallBox");
                        startActivity(intent);
                        App appState = ((App) getApplicationContext());
                        appState.setCurStall(currentStall);
                        Toast.makeText(getApplicationContext(), myName, Toast.LENGTH_LONG).show();
                    }
                });
            }

【问题讨论】:

    标签: java android google-maps loops android-studio


    【解决方案1】:

    Google 地图 setOnInfoWindowClickListener() 方法确实取代了 OnInfoWindowClickListener,因此您看到的是正确的行为。

    要将每个Marker 与适当的Stall 关联,您可以使用在while 循环之外声明的HashMap

    HashMap<Marker, Stall> stallLookup = new HashMap<Marker, Stall>();
    

    然后您可以在设置 cmumarker 后将其填充到循环中:

    stallLookup.put(cmumarker, currentStall);
    

    然后在您的OnInfoWindowClickListener 中,您只需在地图中查找Stall

    Stall currentStall = stallLookup.get(cmumarker);
    

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2013-08-08
      • 1970-01-01
      • 2018-09-17
      相关资源
      最近更新 更多