所以,如果我明白你想要做的正確,那麼我會避免在onClick()
另一個線程。相反,onClick()
應該只是請求一個位置,顯示進度對話框並返回。由於您想要做的工作發生在您收到新位置後,我會在那裏啓動一個AsyncTask。然後,當AsyncTask完成時,最終移除對話框(將其移除並將控制權交還給用戶)。
代碼通常會有所幫助,所以,我會把這onCreate()
或其它地方:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.refresh();
}
});
,並把這個在您的LocationListener的:
public void refresh() {
myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
myDialog = new ProgressDialog(myContext);
myDialog.setIndeterminate(true);
myDialog.show();
}
@Override
public void onLocationChanged(Location location) {
// now do work with your location,
// which your probably want to do in a different thread
new MyAsyncTask().execute(new Location[] { location });
}
然後你需要一個的AsyncTask,它可能看起來像這樣:
class MyAsyncTask extends AsyncTask<Location, Void, Void> {
@Override
protected Void doInBackground(Location... location) {
// start doing your distance/directions/etc work here
return null;
}
@Override
protected void onPostExecute(Void v) {
// this gets called automatically when you're done,
// so release the dialog box
myDialog.dismiss();
myDialog = null;
}
}
您是否將GPS與LocationManager,LocationListener,e TC?我問,因爲很難理解你爲什麼不把你的代碼放到LocationListener.onLocationChanged()中,這是在找到當前位置時調用的。 – 2012-01-30 21:05:14
是的我有locationManager等工作,但當用戶按下按鈕來獲取位置我希望它等到當前的位置被發現之前發生任何事情或其他事情會發生。我應該在問題中包含這些細節。 – 2012-01-30 21:22:45