如何在添加新标记时删除先前的标记



如何在onMapReady中添加新标记时删除先前的标记。有人能帮我解决这个问题吗?这是我的代码…

@Override
        public void onMapReady(@NonNull GoogleMap googleMap) {
            mMap = googleMap;
    
            DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Test");
    
            ValueEventListener listener = databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
    
                    Double f_latitude = snapshot.child("f_latitude").getValue(Double.class);
                    Double f_longitude = snapshot.child("f_longitude").getValue(Double.class);
                    
                    LatLng location = new LatLng(f_latitude, f_longitude);
                    
                    mMap.addMarker(new MarkerOptions().position(location).title("ELE00001").icon(bitmapDescriptorFactory(getApplicationContext(),R.drawable.ele_marker)));
                    mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
                    
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError error) {
    
                }
            });
    
            mMap = googleMap;
            mMap.getUiSettings().setZoomControlsEnabled(true);
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_REQUEST);
                return;
            }
    
        }

如何在onMapReady中添加新标记时删除先前的标记。有人能帮我解决这个问题吗?

有两种方法。你可以清除所有的地图,或者在添加之前删除当前的标记。

要清除整个地图,可以使用下面的代码:

mMap.clear();

要只删除前一个标记,您应该定义一个存储当前标记的变量。首先,在类中定义一个Marker对象。

Marker currentMarker;

然后您需要确保,如果先前的标记已经存在,则需要在添加新标记之前删除它,并使用新标记更新变量。

@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
    mMap = googleMap;
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Test");
    ValueEventListener listener = databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (currentMarker != null) {
                currentMarker.remove();
            }
            Double f_latitude = snapshot.child("f_latitude").getValue(Double.class);
            Double f_longitude = snapshot.child("f_longitude").getValue(Double.class);
            LatLng location = new LatLng(f_latitude, f_longitude);
            currentMarker = mMap.addMarker(new MarkerOptions().position(location).title("ELE00001").icon(bitmapDescriptorFactory(getApplicationContext(), R.drawable.ele_marker)));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {
        }
    });
    mMap = googleMap;
    mMap.getUiSettings().setZoomControlsEnabled(true);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST);
        return;
    }
}

此代码将删除前面的标记,如果它存在,

if (currentMarker != null) {
    currentMarker.remove();
}

这段代码将帮助您存储新添加的标记。

currentMarker = mMap.addMarker(new MarkerOptions().position(location).title("ELE00001").icon(bitmapDescriptorFactory(getApplicationContext(), R.drawable.ele_marker)));

最新更新