0

3 ページのViewPagerがあります。そのうちの 1 つで、AsyncTaskにProgressDialogを表示します。

問題は、向きを変更すると、ダイアログが閉じて表示されないことです。

これが私のコードです:

AndroidManifest.xml

<activity 
    android:name=".LecturaFragment"
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
    android:windowSoftInputMode="adjustPan"  >
</activity>

SherlockFragmentアクティビティ

lecturaFragment.new LoadingLecturaTask(this).execute(lecturas);

//In LecturaFragment (SherlockFragment)
private ProgressDialog dialog;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);    
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{
    ...
}

public void onPause() {
    super.onPause();

    if(dialog != null) {
        dialog.dismiss();
    }
    dialog = null;
}

public class LoadingLecturaTask extends AsyncTask<String, Void, Boolean> {
    private Activity activity;
    private volatile boolean running = true;
    private int lecturas;
    private String result = "";
    /** application context. */
    private Context context;

    public LoadingLecturaTask(Activity activity) {
        this.activity = activity;
        context = activity;
        dialog = new ProgressDialog(context);
        dialog.setCancelable(true);
        dialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                cancel(true);
            }
        });
    }

    @Override
    protected void onCancelled() {
        running = false;
    }        

    @Override
    protected void onPreExecute() {
        dialog.setMessage(getString(R.string.loading_envio));
        dialog.show();
    }

    @Override
    protected void onPostExecute(final Boolean success) {
        if (dialog != null && dialog.isShowing()) {
        dialog.dismiss();
        }

        if (success) {
            ...
        }
    }

    @Override
    protected Boolean doInBackground(final String... args) {
        lecturas = Integer.parseInt(args[0]);
        while (running) {
            try{
                ...                 
                return true;
            } catch (Exception e){
                e.printStackTrace();
                return false;
            }
        }
        return null;
    }
}

私が言ったように、変更方向では、ProgressDialogは消えますが、AsyncTaskはまだ実行されています。だから私が望むのは、向きを変えてダイアログが閉じられたときに、 AsyncTaskが終了するまでもう一度表示することです。

4

3 に答える 3

1

dismiss()あなたのダイアログによるとin onPause()、あなたのアクティビティは再開されているが、AsyncTask.

可能であれば、コードを適切に貼り付けてください。

于 2013-09-02T11:46:51.143 に答える
0

マニフェストでこれを試してください...

<activity android:name="Your Activity Name"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/>
于 2013-09-02T11:39:16.807 に答える