Creative Commons Lizenzvertrag

Montag, 1. Oktober 2012

ShowDialog unter Android

In den Dot.Net-Sprachen gibt es die Möglichkeit mit ShowDialog() ein Programm anzuhalten bis der Dialog beendet ist. Diese Möglichkeit gibt es so ohne weiteres in Android nicht. Der AlertDialog.Builder kennt nur ein show() und diese Funktion hält das aufrufenden Programm nicht an. Um eine modale Darstellung zu bekommen ist es am einfachsten dies mir einer eigenen Klasse zu realisieren die man aus der Klasse Dialog ableitet. Für die Darstellung muss noch ein Layout in einer XML-Datei erstellt werden. Dies lasse ich hier einfach mal weg, jeder der Androidprogramme entwickelt sollte dazu in der Lage sein. Das Beispiel macht nichts weiter als zu warten bis der OK bzw. Abbrechen-Button geklickt wurde. Zusätzliche Funktionalität muss jeder selbst noch implementieren. Hier der entsprechende Quelltext:


   1:  public enum DialogResult{Cancel, Ok}
   2:   
   3:  public class InputDialog extends Dialog{
   4:      private DialogResult dialogResult;
   5:      private Handler mHandler ;
   6:   
   7:      public InputDialog(Activity context){
   8:          super(context);
   9:          setOwnerActivity(context);
  10:          onCreate();
  11:          this.setTitle(context.getString(R.string.app_title));
  12:      }
  13:      
  14:      public DialogResult getDialogResult(){
  15:          return dialogResult;
  16:      }
  17:      
  18:      private void setDialogResult(DialogResult dialogResult){
  19:          this.dialogResult = dialogResult;
  20:      }
  21:      public void onCreate(){
  22:          setContentView(R.layout.inputdialog);
  23:          findViewById(R.id.cancel).setOnClickListener(View.OnClickListener() {
  24:   
  25:              @Override
  26:              public void onClick(View paramView){
  27:                  endDialog(DialogResult.Cancel);
  28:              }
  29:          });
  30:          findViewById(R.id.ok).setOnClickListener(new View.OnClickListener(){
  31:   
  32:              @Override
  33:              public void onClick(View paramView){
  34:                  endDialog(DialogResult.Ok);
  35:              }
  36:          });
  37:      }
  38:      
  39:      public void endDialog(DialogResult result){
  40:          dismiss();
  41:          setDialogResult(result);
  42:          Message m = mHandler.obtainMessage();
  43:          mHandler.sendMessage(m);
  44:      }
  45:   
  46:      public DialogResult showDialog() {
  47:          mHandler = new Handler() {
  48:               @Override
  49:                public void handleMessage(Message mesg){
  50:                  throw new RuntimeException();
  51:                }
  52:          };
  53:          super.show();
  54:          try{
  55:              Looper.getMainLooper().loop();
  56:          }
  57:          catch(RuntimeException e){
  58:              if ((BuildConfig.DEBUG) && (e != null)
  59:                      && (e.getMessage() != null))
  60:                  Log.e(LOG, e.getMessage());
  61:          }
  62:          return dialogResult;
  63:      }
  64:   
  65:  }

Dieser muss nur noch angepasst werden und damit sind dann modale Dialoge unter Android möglich.

Kommentare ohne Google+ erstellen:

Marmel powered by Instant Communities