0

私がやろうとしているのは、ユーザーが location_Button というボタンをクリックした後にユーザーの場所を取得し、場所に関する情報を示すボックスを表示することです。私はこのように試しました:

Button location_Button=(Button) findViewById(R.id.location_button);
    location_Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Define a listener that responds to location updates
           progressDialog = ProgressDialog.show(Settings.this, "", "Loading...");

            final LocationListener locationListener = new LocationListener() {

                public void onLocationChanged(Location location) {
                    // Called when a new location is found by the network location provider.

                    lat =location.getLatitude();
                    lon = location.getLongitude();
                    try{

                        addresses=(geocoder.getFromLocation(lat, lon, 1));
                        if (addresses.size() > 0) {
                            String city = addresses.get(0).getAddressLine(1);
                            String id = city.substring(0,city.length()-5);
                            String state1=String.valueOf(id.charAt(id.length()-3));
                            String state2=String.valueOf(id.charAt(id.length()-2));
                            String STATE = state1+state2;

                            locationManager.removeUpdates(this);
                            progressDialog.dismiss();

                            //alert dialog is established and displayed here



                        }
                        else {
                            //tv.setText("Oops...");
                        }

                    }catch(IOException e){
                        e.printStackTrace();
                    }

                }

                public void onStatusChanged(String provider, int status, Bundle extras) {}

                public void onProviderEnabled(String provider) {}

                public void onProviderDisabled(String provider) {}
            };

問題は、進行状況ダイアログが閉じられないことです。ボタンが押されたときに進行状況ダイアログがなければ、検索してからボックスを表示します。私の目標は、場所が確立された後に進行状況ダイアログを閉じることです。また、警告ダイアログがポップアップするはずですが、そうではありません。進行状況ダイアログの場所が間違っていますか?

4

1 に答える 1

1

Android は常に非同期なので、進行状況ダイアログを使用するにはスレッドを使用する必要があります。例:

コードで、ダイアログを開始する場合は、非同期クラスを呼び出します。

Button location_Button=(Button) findViewById(R.id.location_button);
    location_Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            LocationChanged locationChanged = new LocationChanged(MainActivity.this, "Loading...");
            locationChanged.execute();
        }

ここで、LocationChanged.java を作成する必要があります。

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;

public class LocationChanged extends AsyncTask<Void, Void, Void> {

    private ProgressDialog progressDialog;
    private Context context;
        private String message;

    public LocationChanged (Context context, String message) {
        this.context = context;
                this.message = message;
        }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show (context, null, message);
    }

    @Override
    protected Void doInBackground( Void... params ) {
            // Here you add your code. 

            return null;
    }

    @Override
    protected void onPostExecute( Void result ) {
        super.onPostExecute (result);

        progressDialog.dismiss();

          // You can add code to be executed after the progress (may be a result).
    }

}
于 2013-07-07T20:58:52.737 に答える