android - 如何通过点击菜单中的选项来隐藏地图图钉?
问题描述
我正在创建一个应用程序,它显示几个根据颜色具有不同类别的图钉,类似于显示酒店、餐馆等。我有一个菜单,当我选择选项时,我想隐藏该特定类别,但我无法隐藏图钉,我只是不确定要使用什么代码。
我试过使用 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 以显示已选择的选项。
解决方案
将变量设置为 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);
}
推荐阅读
- python - 使用 Chalice 处理路线
- javascript - 如何刷新数组?
- ios - JTAppleCalendarView 在取消选择项目时显示选定视图
- outlook - Outlook 中 .GetRootItem、.GetParent 和 .GetChildren 之间的区别?
- php - 您的要求无法解决为 laravel 的一组可安装软件包
- javascript - 如何在 JavaScript 中没有查询字符串的情况下将信息从父窗口传递到子窗口?
- c++ - 将视频处理为一串图像
- php - MySQL 查询不关心用户输入之一
- python - 将非标准日期时间字符串解析为日期对象
- scala - Spark 流式传输:非结构化记录