AlertBuilder: Activity anhalten, bis Button betätigt wurde

  • 5 Antworten
  • Letztes Antwortdatum
XploD

XploD

Erfahrenes Mitglied
42
Hallo zusammen.

Ich habe ein Frage zum AlertBuilder:
In dem OnClickListener des Options Menü habe ich einen Apply Button. Bei betätigen dieses Buttons soll das typische "Are you sure?" Fenster aufpoppen.

Nun möchte ich aber nicht im OnClickListener eine Aktion ausführen, sondern ich würde gerne einfach nur den AlertBuilder starten, und dann diesen Thread anhalten, bis einer der Buttons gedrückt wurde. Geht das?
Code:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Sind Sie sicher?");
builder.(...)
builder.create();
builder.show();
builder.wait(); // Sorgt für einen Absturz der Activity

Was muss ich machen, damit ich per wait sagen darf, dass er bis zu einem Druck eines Knöpfchens warten soll?
 
das ist doch das default verhalten!?!

.wait() klingt schonmal ganz schlecht.



builder.setonPositivebutton(xxxx)
da schreibst deinen code hin. du darfst natürlich keinen weiteren code nach dem .show() haben. Thread anhalten geht nicht, da dann die gesamte App nicht mehr bedient werden kann => ui thread ist ja angehalten
 
  • Danke
Reaktionen: XploD
Hmmm. Bei mir (Android 4.0.3 Emulator) rennt der UI Thread einfach weiter, so dass er in einem Breakpoint läuft, der hinter dem show() steht, ohne das die GUI überhaupt geöffnet wurde.

Vielleicht bin ich da noch etwas zu Oldscool (Sprich auf Mikrocontroller in C unterwegs), aber ich mag den OnClickListener im OnClickListener im OnClickListener... nicht.
 
warum onclicklistener im onclicklistener ?

ui thread rennt nicht wirklich weiter.
 
jap das "wartet" so lange bis der dialog dissmis ist ...
 
Ich denke, ich habe meinen Denkfehler gefunden:

Ich habe es mir angewöhnt, immer den Scope mit anzugeben, also this.rename_files(). Das funktioniert im onClick natürlich nicht. Und auf die Idee, einfach mal das this wegzulassen, und nur rename_files() aufzurufen, damit die entsprechende Funktion der umgebenden Klasse ausgeführt wird, bin ich nicht gekommen. Ich habe nach einem Scope parent.rename_files() gesucht, aber nicht gefunden...

Meine Lösung sieht nun so aus:
Code:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
OnClickListener alert_listener = new OnClickListener()
{
   
   public void onClick(DialogInterface dialog, int which) {
      switch (which)
      {
         case AlertDialog.BUTTON_POSITIVE:
            rename_files(filelist);
            filelist = getFileList(new File(config.folder_to_scan()), config.recursive_scan());
            display.setAdapter(new SearchResultAdapter(getApplicationContext(),filelist));
            break;
         case AlertDialog.BUTTON_NEGATIVE:
            break;
         default:
            break;
      
      }

      // kein zugriff auf this.rename 
   }
};
builder.setCancelable(true);
builder.setTitle("Confirm");
builder.setMessage("Really apply settings?");
builder.setPositiveButton("OK", alert_listener);
builder.setNegativeButton("Abort", null);
AlertDialog dialog = builder.create();
dialog.show();

Die einzige offene Frage lautet, ob
Code:
display.setAdapter(new SearchResultAdapter(getApplicationContext(),filelist));
so richtig ist, oder ob da ein anderer Context zugehört...
 
Zurück
Oben Unten