Когда я нажимаю на маркер кластера, мой getMarker всегда равен нулю - PullRequest
0 голосов
/ 17 ноября 2018

У меня проблема с картами Google, когда при нажатии на элемент кластера он всегда возвращает мне значение NULL. Я получаю соответствующие данные, но хочу щелкнуть маркер и изменить фон (чтобы он был в выбранном состоянии), чтобы я мог извлечь информацию из маркера, но не может связаться с пользовательским средством визуализации.

Я использую Custom Renderer, как это:

inner class StationRenderer(context: Context, map: GoogleMap,
                                clusterManager: ClusterManager<Station>) : DefaultClusterRenderer<Station>(context, map, clusterManager) {

        override fun onBeforeClusterRendered(cluster: Cluster<Station>?, markerOptions: MarkerOptions?) {
            markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(createStoreMarker(cluster?.size.toString())))

        }

        override fun onClusterItemRendered(clusterItem: Station?, marker: Marker?) {
            super.onClusterItemRendered(clusterItem, marker)
            clusterMarkerMap[clusterItem!!] = marker!!
        }

        override fun onBeforeClusterItemRendered(item: Station?, markerOptions: MarkerOptions?) {
            markerOptions?.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_pin))
        }

        private fun createStoreMarker(stationsCount:String): Bitmap {
            val markerLayout = layoutInflater.inflate(R.layout.marker_item, null)
            val markerRating = markerLayout.findViewById(R.id.marker_text) as TextView
            markerRating.text = stationsCount
            markerLayout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))
            markerLayout.layout(0, 0, markerLayout.getMeasuredWidth(), markerLayout.getMeasuredHeight())
            val bitmap = Bitmap.createBitmap(markerLayout.getMeasuredWidth(), markerLayout.getMeasuredHeight(), Bitmap.Config.ARGB_8888)
            val canvas = Canvas(bitmap)
            markerLayout.draw(canvas)
            return bitmap
        }
    }

А это мой onClusterItemClick:

override fun onClusterItemClick(p0: Station?): Boolean {
        dragView.visibility = View.VISIBLE
        Toast.makeText(context,p0?.name,Toast.LENGTH_LONG).show()
        val marker = StationRenderer(context!!, mGoogleMaps, mClusterManager!!).getMarker(p0) //this is always null
        marker?.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_pin_selected))
        return true
    }

Это мой onCreate

   override fun doOnCreated() {
        mapView.onCreate(null)
        mapView.onResume()
        mapView.getMapAsync(this)
        viewModel.getStations(activity?.supportFragmentManager!!, R.id.fragment_container, context!!)
        viewModel.retrieveStations().observe(this, Observer<List<Station>> {
            addItems(it)
            mClusterManager?.addItems(stationList)
        })
    }

Это мой onMapReady

 override fun onMapReady(googleMap: GoogleMap) {
        MapsInitializer.initialize(context )
        mGoogleMaps = googleMap
        googleMap.mapType = GoogleMap.MAP_TYPE_NORMAL
        //mGoogleMaps.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(51.503186, -0.126446), 10f))
        mClusterManager = ClusterManager(context, mGoogleMaps)
        mClusterManager?.setRenderer(StationRenderer(context!!,mGoogleMaps, mClusterManager!!))
        mGoogleMaps.setOnCameraIdleListener(mClusterManager)
        mGoogleMaps.setOnMarkerClickListener(mClusterManager)
        mClusterManager?.setOnClusterClickListener(this)
        mClusterManager?.setOnClusterItemClickListener(this)
    }
...