Android Studio Map setOnMarkerClickListener 不在片段上工作
Posted
技术标签:
【中文标题】Android Studio Map setOnMarkerClickListener 不在片段上工作【英文标题】:Android Studio Map setOnMarkerClickListener not working on a fragment 【发布时间】:2021-08-09 06:09:57 【问题描述】:正如您在标题中看到的那样,我在片段中的地图中的 setOnMarkerClickListener 方法存在问题。 标记出现了,但是当我单击它们时,它们的标题只会出现,而不是我在下面显示的 Toast。
我尝试了不同的解决方案,但没有一个对我有用。我把我的代码留在这里。任何帮助表示赞赏!
public class DashboardFragment extends Fragment implements OnMapReadyCallback
private GoogleMap mMap;
public LocationManager locationManager;
public LocationListener locationListener;
public LatLng userLatLong,mLatLong1,mLatLong2;
public boolean isNetworkEnabled = false;
public boolean isGPSEnabled = false;
public MarkerOptions mPosicion,m1,m2;
public Marker marcadorPosicion,marcador1,marcador2;
SupportMapFragment fragment;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState)
View root = inflater.inflate(R.layout.fragment_dashboard, container, false);
fragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map2);
fragment.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
//REAL TIME POSITION NTW
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener()
@Override
public void onLocationChanged(Location location)
userLatLong = new LatLng(location.getLatitude(), location.getLongitude());
marcadorPosicion.remove();
mPosicion=new MarkerOptions().position(userLatLong).title("Estas aqui");
marcadorPosicion = mMap.addMarker(mPosicion);
mMap.moveCamera(CameraUpdateFactory.newLatLng(userLatLong));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLatLong, 15));
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
@Override
public void onProviderEnabled(String provider)
@Override
public void onProviderDisabled(String provider)
;
//Marcadores
cargarMapa();
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
@Override
public boolean onMarkerClick(Marker marker)
Toast.makeText(getActivity(), "Marker Clicked", Toast.LENGTH_SHORT).show();
return false;
);
public void cargarMapa()
//Marcadores
//Metemos las coordenadas de los monumentos
mLatLong1= new LatLng(43.3233106, -3.1215395);//Foto_002
mLatLong2= new LatLng(43.3483518, -3.1189326);//Foto_00
m1=new MarkerOptions().position(mLatLong1).title("Foto_002").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));//Foto_002
marcador1 = mMap.addMarker(m1);
m2=new MarkerOptions().position(mLatLong2).title("Foto_005").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));//Foto_005
marcador2 = mMap.addMarker(m2);
【问题讨论】:
【参考方案1】:这是由于您在 onclicklistener 上返回 false 造成的。根据文档,返回 false 是打开信息窗口的默认选项。
所以你可以做类似的事情
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
@Override
public boolean onMarkerClick(final Marker marker)
if (marker.getTitle().equals("Foto_002") || marker.getTitle().equals("Foto_005"))
Toast.makeText(getActivity(), "Marker Clicked", Toast.LENGTH_SHORT).show();
return true;
return false;
【讨论】:
它对我也不起作用:v。可能是因为我将它们添加到地图的方式而失败了吗? 我已经在正常活动上尝试了 onMarkerClick 方法,它工作正常。需要有一种方法可以在片段上做同样的事情 尝试 applicationContext() ,可能上下文设置不正确 试过但没有结果。单击除 setOnMarkerClickListener 之外的标记时,是否有另一种方法可以执行操作? onMapClick 方法对我来说非常有效,但我无法使用它在标记上执行操作【参考方案2】:问题解决了。由于某种原因,在执行 addLayerMap 方法以向地图添加 kml 时,onMarkerClick 方法被完全阻塞。如果将来有人遇到类似的问题,我正在做的是使用折线创建一条路线及其各自的坐标点。
【讨论】:
以上是关于Android Studio Map setOnMarkerClickListener 不在片段上工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google map api 在 android Studio 中解析 Json
android studio map.setMyLocationEnabled(true) 中的错误 getMap();
设置新航点后如何删除以前的折线... Google Map Android Studio
在 android studio 中无法获取华为 Map Kit 的 com.huawei.hms.location.LocationServices