【问题标题】:Allowing user to place 1 marker on google map only只允许用户在谷歌地图上放置 1 个标记
【发布时间】:2021-01-23 04:25:49
【问题描述】:

我一直在限制用户可以在 Google 地图的地图上点按的标记数量

问题:每当用户点击谷歌地图时,标记会不断创建新的标记,而旧的标记不会清除。

更新:我认为它不属于 else if 语句。因为每次调用该函数时,它都会重新启动该过程。从而允许不断创建标记。

override fun onMapClick(point: LatLng){

val tappedLocation = LatLng(latitude,longitude)
        var mapMarkerCount: Int =0

        if(mapMarkerCount == 0) {
            map.addMarker(
                    MarkerOptions()
                            .position(tappedLocation)
                            .title("You have Clicked")

            )
            
            mapMarkerCount++

        }//check Marker Count
        else if(mapMarkerCount == 1){

            map.clear()
            mapMarkerCount--
        }
}

我尝试分配一个变量来检查标记是否已创建。 如果标记存在,则在下次点击地图时,它应该清除地图,并且新标记位于用户点击的新位置。

【问题讨论】:

    标签: android google-maps kotlin google-maps-markers


    【解决方案1】:

    我提前为我糟糕的英语道歉

    我认为你的问题来自你的变量声明。

    您应该尝试: 删除 mapMarkerCount=0 并将其设为布尔值 我认为每次添加标记时程序都会执行mapMarkerCount=0,所以我认为它解释了为什么你不能删除旧标记

    if (markerExist == false)
    addOne();
    markerExist=true;
    elsif (markerExist == true)
    map.clear();
    add one();
    

    使用此代码, 第一次你只会添加一个新的标记。 然后每次触摸屏幕时清除旧标记并放置新标记

    【讨论】:

      【解决方案2】:

      自从 override fun onMapClick(point: LatLng),

      意思是每当函数被调用时,它总是会逐行执行fun onMapClick

      您可以做的是,您可以在放置maps.addMarker()之前使用map.clear(),因此每当调用该函数时,它会在添加之前先清除地图。

      override fun onMapClick(point: LatLng){
      
      map.clear() //above the adding of marker
      
      val tappedLocation = LatLng(latitude,longitude)
      
      map.addMarker(
                          MarkerOptions()
                                  .position(tappedLocation)
                                  .title("You have Clicked")
      
                  )
      }
      

      基本上你不需要做一个标记来检查。如果您想保留多个标记或其他东西,则不建议这样做,因为它会清除谷歌地图上的任何东西。到用户第一次看到时的默认地图。

      【讨论】:

      • 请注意,您还可以使用保存的标记并调用 .position 来更新标记的位置。
      • 嗨@Andy,你会在哪一行拨打.position?我试过你提到的那种方法,但它一直给我多个标记。我相信您的方法可能是更好的方法。
      • 在这段代码中——去掉清除,将一个类变量设置为addMarker的结果(当类变量== null);在 else (class variable != null) 中使用 class variable 并调用 .position(tappedLocation)。
      【解决方案3】:

      您的代码在每次点击地图时分配mapMarkerCount = 0,即使地图上可能已经有一个标记。正因为如此,它总是会落入 if 语句块中,因为单击地图时 mapMarkerCount 永远不会等于 1。在 onCreate 一开始就做这个分配会是一个更好的选择。 或者正如这里有人建议的那样,考虑到您只希望在地图上有一个标记,布尔变量应该适合您的目的。一种实现:

      var mapMarkerExists: Boolean = false
      
      override fun onMapClick(point: LatLng) {
      
          val tappedLocation = LatLng(latitude,longitude)
      
          if(mapMarkerExists) {
              map.clear()
              map.addMarker(
                  MarkerOptions()
                      .position(tappedLocation)
                      .title("You have Clicked"))
          }//check Marker Count
          else {
              map.addMarker(
                  MarkerOptions()
                      .position(tappedLocation)
                      .title("You have Clicked"))
              mapMarkerExists = true
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 2018-05-16
        • 2017-05-09
        • 2011-09-08
        • 2018-01-23
        • 2016-03-10
        • 2012-06-05
        相关资源
        最近更新 更多