J'ai une activité qui charge un AlertDialog comme ceci.Gestion des changements d'orientation avec Context et AlertDialog/AsyncTask
progressDialog = new ProgressDialog(MyActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Doing Something");
progressDialog.setCancelable(false);
progressDialog.show();
J'ai aussi une autre classe qui étend AsyncTask
private class MyBackgroundTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
...do stuff
}
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
Si l'orientation des changements d'écran que je reçois une erreur d'essayer de joindre à une vue qui n'existe pas. C'est parce que l'activité a été détruite et le contexte a disparu.
J'ai donc ajouté ceci à onDestroy() et il l'a corrigé.
@Override
public void onDestroy() {
if(progressDialog!=null)
if(progressDialog.isShowing())
progressDialog.cancel();
if(background!=null)
background.cancel(true);
}
Mais cela signifie que je dois toujours garder une référence à la boîte de dialogue et AsyncTask
Je ne peux pas faire ceci par exemple:
new MyAsyncTask().execute();
En cas de changement d'orientation, aussi je ne peut pas faire cela:
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("some title")
.setMessage("some message")
.setPositiveButton(R.string.ok, null)
.show();
Cela ne me semble pas juste et il doit y avoir une meilleure wa y, je sais que vous pouvez utiliser getApplicationContext() mais dans certaines situations ce n'est pas viable.
Comment gérer cela correctement?