在android google map v2中使标记只能点击一次

Posted

技术标签:

【中文标题】在android google map v2中使标记只能点击一次【英文标题】:make a marker clickable only once in android google map v2 【发布时间】:2016-09-11 20:05:53 【问题描述】:

我在我的 Google 地图中显示了一组标记,并且我想让制作者只能点击一次。如果我再次点击同一个标记,我应该会收到类似"already clicked" 或类似的消息。我该怎么做?

  public void getData() 
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL,
            new Response.Listener<JSONArray>() 
                @Override
                public void onResponse(JSONArray response) 
                    parseData(response);
                
            ,
            new Response.ErrorListener() 
                @Override
                public void onErrorResponse(VolleyError error) 


                
            );

    //Creating request queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);

    //Adding request to the queue
    requestQueue.add(jsonArrayRequest);

private void parseData(JSONArray array) 


    for (int i = 0; i < array.length(); i++) 
        JSONObject json = null;
        try 
            json = array.getJSONObject(i);


            place1 = json.getString("place");


            Lat1 = json.getString("latitude");


            Long1 = json.getString("longitude");
            sensor = json.getString("sensor1");
            bin_capacity = json.getString("capacity");






            if (Integer.parseInt(sensor) >= 0 && Integer.parseInt(sensor) <= 60) 
                LatLng latLng = new LatLng(Double.parseDouble(Lat1), Double.parseDouble(Long1));
                arrayLatlong.add(latLng);


                for (int j = 0; j < arrayLatlong.size(); j++) 
                    arrayPlace.add(place1);
                    bin.add(bin_capacity);


                   myMarker= map.addMarker(new MarkerOptions().position(latLng).title(bin_capacity));
                    arrayMarker.add(myMarker);




                    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
                                                    @Override
                                                     public boolean onMarkerClick(Marker marker) 


                                                         for (int k = 0; k < arrayMarker.size(); k++) 

                                                             if (marker.equals(arrayMarker.get(k))) 

                                                                     counter++;
                                                                     capacity.setText("Capacity = "+counter);



                                                                 

         catch (JSONException e) 
            e.printStackTrace();
        


    

【问题讨论】:

【参考方案1】:

使用布尔值来维护状态:

boolean isMarkerClicked = false;

并在 onclicklistener 中更新

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
                                                    @Override
                                                     public boolean onMarkerClick(Marker marker) 
          if(!isMarkerClicked)
               isMarkerClicked = true;
             //put your rest of code that will work on marker click
            else
             //show here toast message 
           


 
);

【讨论】:

【参考方案2】:

试试这个

在标记点击监听此代码

googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
        @Override
        public boolean onMarkerClick(Marker marker) 
            //Toast.makeText(MapActivity.this, marker.getTitle(), Toast.LENGTH_SHORT).show();// display toast
            return false;
        
    );

// 标记标题和可点击消息使用此代码

googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() 
        @Override
        public void onInfoWindowClick(Marker marker) 

            if (marker.getTitle().equals("Your Location")) 

             else 
                Toast.makeText(MapActivity.this, map.get("" + marker_list.indexOf(marker.getTitle())).get("stylistUserId"), Toast.LENGTH_SHORT).show();


            
        
    );

【讨论】:

【参考方案3】:

在这种情况下,您可以创建一个Temporary ArrayList() or HashMap()

在您的onMarkerClick() 方法中检查我们的temp list 是否包含标记,如果 显示toast,如果 将标记添加到temp list .

【讨论】:

【参考方案4】:

替换以下代码:

 map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
    @Override
    public boolean onMarkerClick(Marker marker) 


     for (int k = 0; k < arrayMarker.size(); k++) 

      if (marker.equals(arrayMarker.get(k))) 

       counter++;
       capacity.setText("Capacity = " + counter);



      

      catch (JSONException e) 
      e.printStackTrace();
     


    

用这个:

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
   @Override
   public boolean onMarkerClick(Marker marker) 

    if (arrayMarker.contains(marker)) 
       //show here toast message 
     else 
        arrayMarker.add(marker);
       //put your rest of code that will work on marker click
    
   
  

【讨论】:

以上是关于在android google map v2中使标记只能点击一次的主要内容,如果未能解决你的问题,请参考以下文章

Android studio v0.3.2, gradle, google maps v2.0 找不到类“com.google.android.gms.maps.MapFragment

在 Google Maps Android SDK (v2) 中更改建筑物颜色

如何在 Google Map Api V2 Android 中搜索?

android google map v2 在 gmap lstarts 上不断崩溃

Google Maps Android v2 中的集群标记

在 Google Maps API v2 Android 中添加多个标记