Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Maps v2-信息窗口尽管存在侦听器,但单击不工作_Android_Kotlin_Android Maps V2 - Fatal编程技术网

Android Maps v2-信息窗口尽管存在侦听器,但单击不工作

Android Maps v2-信息窗口尽管存在侦听器,但单击不工作,android,kotlin,android-maps-v2,Android,Kotlin,Android Maps V2,我正试图根据单击的InfoWindow来显示Toast。我已经为每个InfoWindow实现了click监听器,但由于某些原因,它们在单击时都不会执行任何操作。我还分别尝试了两种不同的方法(mGoogleMap.setOnInfoWindowClickListener)和(override fun onInfoWindowClick),但仍然没有成功 class MyFragment : androidx.fragment.app.Fragment(), GoogleMap.OnInfoWind

我正试图根据单击的
InfoWindow
来显示
Toast
。我已经为每个
InfoWindow
实现了click监听器,但由于某些原因,它们在单击时都不会执行任何操作。我还分别尝试了两种不同的方法(
mGoogleMap.setOnInfoWindowClickListener
)和(
override fun onInfoWindowClick
),但仍然没有成功

class MyFragment : androidx.fragment.app.Fragment(), GoogleMap.OnInfoWindowClickListener, OnMapReadyCallback {
    private lateinit var mGoogleMap: GoogleMap
    private lateinit var mMapView: MapView

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val v = inflater.inflate(R.layout.my_fragment, container, false)

        mMapView = v.map_location
        mMapView.onCreate(savedInstanceState)
        mMapView.getMapAsync(this)

        return v
    }

    override fun onMapReady(googleMap: GoogleMap) {
        mGoogleMap = googleMap
        mGoogleMap.mapType = GoogleMap.MAP_TYPE_NORMAL


        val locationA = LatLng(44.862390, -0.550287)
        mGoogleMap.addMarker(
            MarkerOptions()
                .position(locationA)
                .title("Location A")
        )

        val locationB = LatLng(44.863089, -0.551417)
        mGoogleMap.addMarker(
            MarkerOptions()
                .position(locationB)
                .title("Location B")
        )

        mGoogleMap.setOnInfoWindowClickListener { marker ->
            if (marker.equals(locationA)) {
                Toast.makeText(activity, "A", Toast.LENGTH_SHORT).show()
            } else if (marker.equals(locationB)) {
                Toast.makeText(activity, "B", Toast.LENGTH_SHORT).show()
            }
        }

        val cameraUpdate = CameraUpdateFactory.newLatLngZoom(LatLng(44.862716, -0.550763), 18f)
    }

    override fun onInfoWindowClick(marker: Marker?) {
        if (marker != null) {
            if (marker.id == "locationA") {
                Toast.makeText(activity, "A", Toast.LENGTH_SHORT).show()
            }
            else if (marker.id == "locationB") {
                Toast.makeText(activity, "B", Toast.LENGTH_SHORT).show()
            }
        }
    }

    override fun onResume() {
        super.onResume()
        mMapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        mMapView.onPause()
    }

    override fun onDestroy() {
        super.onDestroy()
        mMapView.onDestroy()
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        mMapView.onSaveInstanceState(outState)
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mMapView.onLowMemory()
    }
}

您正在将LatLng与Marker进行比较,它无法工作

例如,您应该比较标记标题:

override fun onMapReady(googleMap: GoogleMap) {
    mGoogleMap = googleMap
    mGoogleMap.mapType = GoogleMap.MAP_TYPE_NORMAL


    val locationA = LatLng(44.862390, -0.550287)
    // markerA is a variable of your fragment
    markerA = mGoogleMap.addMarker(
        MarkerOptions()
            .position(locationA)
            .title("Location A")
    )

    val locationB = LatLng(44.863089, -0.551417)
    // markerB is a variable of your fragment
    markerB = mGoogleMap.addMarker(
        MarkerOptions()
            .position(locationB)
            .title("Location B")
    )

    mGoogleMap.setOnInfoWindowClickListener { marker ->
        onMarkerClick(marker)
    }

    val cameraUpdate = CameraUpdateFactory.newLatLngZoom(LatLng(44.862716, -0.550763), 18f)
}

override fun onInfoWindowClick(marker: Marker?) {
    if (marker != null) {
        onMarkerClick(marker)
    }
}

private fun onMarkerClick(marker: Marker) {
        if (marker.id == markerA.id) {
            Toast.makeText(activity, "A", Toast.LENGTH_SHORT).show()
        } else if (marker.id == markerB.id) {
            Toast.makeText(activity, "B", Toast.LENGTH_SHORT).show()
        }
    }
}

这个去哪儿了?在
mGoogleMap.setOnInfoWindowClickListener
覆盖有趣的onInfoWindowClick
中,我刚刚尝试了你的答案,但它不起作用。请记住,我希望单击
信息窗口时出现
土司
,而不是
标记
。请查看我制作的onMarkerClick方法版本,因为它是错误的比较。如果至少有两个标记具有相同名称,则最好不要匹配标记的标题。您能告诉我如何检查标记位置吗?我已经尝试了
如果(marker.position==locationA){…
但是我得到了一个未解决的引用错误。@MacaronLover我同意您的看法,按名称比较标记不是一个好方法。您可以使用addMarker方法返回的标记id或标记,如下所示:val markerA=mGoogleMap.addMarker(MarkerOptions().position(位置B).标题(“位置B”))