为什么我的标记没有重置为空?

时间:2014-04-11 13:07:14

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

我有一张地图,一次只允许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的消息,即使在第一次加载地图时也根本无法添加标记。

任何帮助都会很棒

2 个答案:

答案 0 :(得分:0)

创建对添加的标记的引用,并在将其添加到新的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)));
}

答案 1 :(得分:0)

我意识到我错误地使用了代码,因此我已经解决了这个问题:

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

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

相关问题