【问题标题】:Why is my marker not resetting to null?为什么我的标记没有重置为空?
【发布时间】:2014-04-11 13:07:13
【问题描述】:

我有一张地图,一次只允许 1 个标记。但为了防止该标记被意外替换为另一个标记,需要进行设置,以便在添加另一个标记之前清除该标记。
我通过 onMapClick 设置标记并通过 onMapLongClick 清除它们。就目前而言,标记的清除和添加工作正常,但我似乎无法设置地图,因此您需要先清除地图。
我尝试了check for existing markers 的解决方案,但没有奏效。
这是我的设置代码,目前通过清除现有标记并添加另一个标记来工作,而无需先清除原始标记:

@Override
    public void onMapLongClick(LatLng position) {
        mMap.clear();
        Toast.makeText(this, "Position Cleared", Toast.LENGTH_SHORT).show();
        position = null;
    }

    @Override
    public void onMapClick(LatLng position){
        if (position != null){
            mMap.clear();
            mMap.addMarker(new MarkerOptions()
            .position(position)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new)));
        }
        else {
            
            mMap.addMarker(new MarkerOptions()
            .position(position)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new)));           
        }
    }

但我认为应该是这样的:

@Override
    public void onMapLongClick(LatLng position) {
        mMap.clear();
        Toast.makeText(this, "Position Cleared", Toast.LENGTH_SHORT).show();
        position = null;
    }

    @Override
    public void onMapClick(LatLng position){
        if (position == null){
            //mMap.clear();
            mMap.addMarker(new MarkerOptions()
            .position(position)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new)));
        }
        else {
            Toast.makeText(this, "Clear first", Toast.LENGTH_SHORT).show();
                        
        }
    }

但所做的只是给我 Toast 消息,即使在第一次加载地图时也根本无法添加标记。

任何帮助都会很棒

【问题讨论】:

  • 你为什么不记得标记参考而不是位置? map.addMarker() 返回对添加标记的引用。然后当您引用为空时添加新标记,当它不为空时要求清除地图(您可以通过调用其remove() 方法来删​​除标记。
  • @BobanS。 - 这就是我正在尝试但未能实现的目标:/
  • 我已经修好了。谢谢

标签: android google-maps google-maps-markers google-maps-android-api-2 markers


【解决方案1】:

创建对添加标记的引用,并在将其再次添加到新的 LatLng 位置之前将其删除。

private Marker marker;

/**
**
some code here
**
**/

@Override
public void onMapClick(LatLng position) {
    if(marker != null) 
        marker.remove();
    marker = mMap.addMarker(new MarkerOptions().position(position).icon(
            BitmapDescriptorFactory
                    .fromResource(R.drawable.ic_launcher_new)));
}

【讨论】:

  • mansoulx - 我不知道我是否正确地阅读了你的答案,但对我来说它读到 - 如果标记不为空,请将其删除并添加另一个是否正确?如果是这样,我需要的是,如果标记不为空,则显示一条消息,告诉用户首先使用长按地图删除前一个标记,或者如果标记为空则添加一个标记
【解决方案2】:

我意识到我使用的代码不正确,因此我已经解决了这个问题:

public void onMapClick(LatLng position){
        if(marker == null) {
               marker = mMap.addMarker(new MarkerOptions()
               .position(position)
               .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new)));
            } else {
                Toast.makeText(this, "Please clear previous position before adding another", Toast.LENGTH_SHORT).show();
            }

应用程序现在按预期运行。谢谢你的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2013-04-24
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多