首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我该如何为我的ClusterManager中的每个标记启动一个自定义URI意图?

我该如何为我的ClusterManager中的每个标记启动一个自定义URI意图?
EN

Stack Overflow用户
提问于 2019-03-26 06:43:57
回答 1查看 194关注 0票数 0

我目前正在尝试启动一个Uri意图,以便当用户单击标记的信息窗口时,它将启动一个谷歌查询+我从Firebase获得并解析为ClusterManager的相应标记的名称。

我尝试创建一个字符串容器来在其中存储公司名称,然后添加一个谷歌查询字符串,并将其作为Uri意图传递到我的setOnInfoWindowClickListener中。

(注意: 'TheNameOfThisMarker‘实际上并没有在这里定义,我只是想给出一个我试图实现的想法’)

我的信息窗口单击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()
    }

虽然我能够在Info窗口中执行某些操作,但我不知道如何确定每个标记的名称并将其添加到我的查询Uri意图中。

EN

回答 1

Stack Overflow用户

发布于 2019-03-26 08:17:33

经过大量的研究和尝试,我找到了自己问题的解决方案。

我创建了HashMap of LatLng,String

我将Firebase中的LatLng位置以及类型为String的公司名称存储到HashMap中,然后在我的setOnInfoWindowClickListener上,我创建了一个包含marker.position.latitude和经度的经度和纬度变量。然后,我创建了另一个名为addPositions的LatLng类型的变量,并在其中添加了经度和经度标记位置。然后我就去companyMap.get(addPositions),瞧!!我得到了相应标记的公司字符串名称!

    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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55347444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档