onClick等待1秒然后运行代码

时间:2014-08-17 18:07:54

标签: android onclick locationmanager

我有这个代码,通过点击按钮,相机位于我在地图上的位置。

问题是:当我第一次点击时,相机离我的位置太远了,我怀疑onClick方法是让位置管理器只获得部分坐标(当我第二次点击同一个按钮时它得到了正确的位置。)

所以,这是代码:

我想尝试的是:

  1. 我点击按钮
  2. 2

       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE)
       location= locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
       longitude = location.getLongitude();
       latitude = location.getLatitude();
       latlng = new LatLng(latitude, longitude);
    

    此代码运行

    1. 等一下
    2. 4

         CameraUpdate center = CameraUpdateFactory.newLatLng(latlng);
         CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
         map.moveCamera(center);
         map.animateCamera(zoom);
         map.addMarker(new MarkerOptions()
         .position(latlng));
      

      此代码运行。

      这可能吗?

      对不起基本问题,但我是Java / Android编程的新手(大约3周左右,我仍然发现一些基本的东西很难实现)。

      PS:代码几乎完美地运行,它唯一困扰我的是我必须点击两次才能进入它应该是的位置(在首先点击它距离它约3到4公里 - 估计计算)

2 个答案:

答案 0 :(得分:4)

最好的方法是使用处理程序。请尝试以下:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
   CameraUpdate center = CameraUpdateFactory.newLatLng(latlng);
   CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
   map.moveCamera(center);
   map.animateCamera(zoom);
   map.addMarker(new MarkerOptions()
   .position(latlng));
    }
},1000); //adding one sec delay

尝试查看有关处理程序的更多信息。

www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html

答案 1 :(得分:0)

以这种方式编写代码是个坏主意。很常见的getLastKnownLocation将返回null。相反,您应该使用requestSingleUpdate来获取具有新数据的单个位置更新,并将依赖于该位置的任何代码放入onLocationChanged函数中。