【问题标题】:Android Studio Map setOnMarkerClickListener not working on a fragmentAndroid Studio Map setOnMarkerClickListener 不在片段上工作
【发布时间】: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);

    }

【问题讨论】:

    标签: java android google-maps-markers


    【解决方案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 方法被完全阻塞。如果将来有人遇到类似的问题,我正在做的是使用折线创建一条路线及其各自的坐标点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2017-06-15
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多