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 不在片段上工作的主要内容,如果未能解决你的问题,请参考以下文章

如何设定android studio 版本

使用 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

Android studio 中如何批量引入图片。一大堆图片!