首页 > 解决方案 > 如何通过点击菜单中的选项来隐藏地图图钉?

问题描述

我正在创建一个应用程序,它显示几个根据颜色具有不同类别的图钉,类似于显示酒店、餐馆等。我有一个菜单,当我选择选项时,我想隐藏该特定类别,但我无法隐藏图钉,我只是不确定要使用什么代码。

我试过使用 setVisibility(invisible) 但我不知道应该去哪里。

这是我的主要活动——菜单。

public class AR_MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main_menu, menu);

            return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //trying to get the menu options to do something
        switch(item.getItemId()){
            case R.id.poi1:
                Toast.makeText(this, "Enemy Selected", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.poi2:
                Toast.makeText(this, "IED Selected", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.poi3:
            Toast.makeText(this, "Obstruction Selected", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }

这是创建地图图钉的地方,也在主要活动中。

  public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setMyLocationEnabled(true);

       LocationManager and listener
        locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {


                mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                // Add a marker in Sydney and move the camera
                LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
                mMap.clear();
                mMap.addMarker(new MarkerOptions().position(userLocation).title("AR Projects HQ")
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 16));


                LatLng obstruction = new LatLng(50.878640, -2.108940);
                mMap.addMarker(new MarkerOptions().position(obstruction).title("Obstruction").snippet("Fallen Power Lines. Eng notified.")
                   .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));

该程序运行没有问题,并显示一个 toast 以显示已选择的选项。

标签: android

解决方案


将变量设置为 mMap.addMarker

Marker mark = mMap.addMarker(new MarkerOptions() ....
mark.setVisible(false);

如果需要,此标记可以添加到数组中

List<Marker> markList = new ArrayList<>();

////

Marker mark = mMap.addMarker(new MarkerOptions() ....
markList.add(mark);

//// 然后你可以用循环隐藏

for (Marker miaw : markList) {
   miaw.setVisible(false);
}

推荐阅读