Как мне начать запуск настраиваемого URI-намерения для каждого маркера в моем ClusterManager? - PullRequest
0 голосов
/ 26 марта 2019

В настоящее время я пытаюсь запустить намерение Uri, чтобы, когда пользователь щелкает информационное окно маркера, он запускал запрос Google + имя соответствующего маркера, который я получил от Firebase и проанализировал в ClusterManager.

Я попытался создать держатель строки для хранения названия компании внутри него, а затем добавить его со строкой запроса Google и передать его в качестве Uri Intent внутри моего setOnInfoWindowClickListener.

( ПРИМЕЧАНИЕ: «TheNameOfThisMarker» здесь фактически не определено, я просто хотел дать представление о том, чего я пытаюсь достичь »)

Окно My Info Click Listener:

        mMap.setOnInfoWindowClickListener(object : GoogleMap.OnInfoWindowClickListener {
            override fun onInfoWindowClick(marker: Marker) {
                val url = "http://www.google.com/#q=" + " " + (TheNameOfThisMarker)
                val i = Intent(Intent.ACTION_VIEW)
                i.setData(Uri.parse(url))
                startActivity(i)
            }
        })

Загрузка данных из Firebase:

    private fun loadMarkersFromDB() {
        mCompanies.child("data/results").addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (s in dataSnapshot.children) {
                        var company = s.getValue(Company::class.java)
                        val infoWindow =
                            MyItem(company!!.latitude, company.longitude, company.name)
                        mClusterManager.setAnimation(false)

                        if ((company.latitude < (circle.center.latitude + circle.radius) && company.latitude > (circle.center.latitude - circle.radius))
                            && ((company.longitude < (circle.center.longitude + circle.radius) && company.longitude > (circle.center.longitude - circle.radius)))
                        ) {
                            mClusterManager.addItem(infoWindow)
                        }

                        TheNameOfThisMarker = company!!.name
                        Log.d("onDataChange", company.toString())
                    }
                }
            }

            override fun onCancelled(databaseError: DatabaseError) {
                Log.w("MapsActivity", databaseError.toException())
            }
        })
    }

Настройка моего кластера:

    private fun setUpCluster() {
        // Initialize the manager with the context and the map.
        // (Activity extends context, so we can pass 'this' in the constructor.)
        mClusterManager = ClusterManager(this, mMap)
        // Point the map's listeners at the listeners implemented by the cluster
        // manager.
        mMap.setOnCameraIdleListener(mClusterManager)
        mMap.setOnMarkerClickListener(mClusterManager)

        // Add cluster items (markers) to the cluster manager.
        loadMarkersFromDB()
    }

Несмотря на то, что я могу что-то сделать в моем информационном окне, нажмите «Слушатель», но я не знаю, как точно указать имя каждого отдельного маркера и добавить его в свой запрос Uri.

1 Ответ

0 голосов
/ 26 марта 2019

После долгих исследований, проб и ошибок я нашел решение своей проблемы.

Я создал HashMap из LatLng, String

Я хранюРасположения LatLng из моей Firebase в HashMap, а также имена компаний с типом String, а затем в моем setOnInfoWindowClickListener я создаю переменную lat и long, которая содержит marker.position.latitude и longitude.Затем я создаю другую переменную с именем addPositions типа LatLng и добавляю в нее позиции маркеров lat и long.Тогда я просто иду companyMap.get (addPositions) и вуаля!Я получаю название компании String для соответствующих маркеров!

    private lateinit var companyName: String
    private lateinit var companyLocation: LatLng
    private val companyMap = hashMapOf<LatLng, String>()
        mMap.setOnInfoWindowClickListener(object : GoogleMap.OnInfoWindowClickListener {
            override fun onInfoWindowClick(marker: Marker) {
                var lat = marker.position.latitude
                var long = marker.position.longitude
                var addPositions: LatLng
                addPositions = LatLng(lat, long)

                var companyGet = companyMap.get(addPositions)

                val url = "http://www.google.com/#q=" + companyGet.toString()
                val i = Intent(Intent.ACTION_VIEW)
                i.setData(Uri.parse(url))
                startActivity(i)
            }
        })
  private fun loadMarkersFromDB() {
        mCompanies.child("data/results").addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (s in dataSnapshot.children) {
                        var company = s.getValue(Company::class.java)
                        val infoWindow =
                            MyItem(company!!.latitude, company.longitude, company.name)
                        mClusterManager.setAnimation(false)

                        if ((company.latitude < (circle.center.latitude + circle.radius) && company.latitude > (circle.center.latitude - circle.radius))
                            && ((company.longitude < (circle.center.longitude + circle.radius) && company.longitude > (circle.center.longitude - circle.radius)))
                        ) {
                            mClusterManager.addItem(infoWindow)
                        }

                        companyName = company.name
                        companyLocation = LatLng(company.latitude, company.longitude)
                        companyMap.put(companyLocation, companyName)
                        Log.d("onDataChange", company.toString())
                    }
                }
            }

            override fun onCancelled(databaseError: DatabaseError) {
                Log.w("MapsActivity", databaseError.toException())
            }
        })
    }

WhooHoo !!: D

...