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が終了するまでもう一度表示することです。