Meine Android-App muss nach einer Verzögerung einen Dialog anzeigen. Das Problem ist, dass sich der Kontext zum Zeitpunkt der Anzeige des Dialogfelds möglicherweise geändert hat.Wie kann ich einen Dialog in einem anderen Kontext anzeigen?
Wie kann ich dieses Problem lösen?
Mein Code rechts sieht nun wie folgt aus:
class UpdateRunnable extends Runnable {
private Context ctx;
UpdateRunnable(Context ctx) {
this.ctx = ctx
}
@Override
public void run() {
//throws exception: "Unable to add window -- token null is not for an application"
AlertDialog.Builder builder = new AlertDialog.Builder(ctx.getApplicationContext());
builder.setTitle("Time to refresh data");
builder.setMessage("Data needs updating");
builder.show();
}
}
class MyAvtivity extends AppCompatActivity {
@override
public void onCreate(...) {
Handler updateHandler = new Handler();
updateHandler.postDelayed(new UpdateRunnable(this), 10000);
//do some stuff
//start another activity
}
}
Dies wirft keine Ausnahme, aber es zeigt auch nicht das Dialogfeld (weil es versucht, es auf einer Aktivität anzuzeigen, die nicht mehr sichtbar ist) und später das Fenster verliert – B1CL0PS