Так что, если я понимаю, что вы хотите сделать правильно, тогда я бы не стал создавать еще один поток в 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;
}
}