在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 中搜索?