2017-09-24 18 views
1

Ich habe ein Dialogfenster mit einem EditText-Eingabefeld. Ich möchte den Eingabewert noch ein paar Mal verwenden, möchte aber so wenig Code wie möglich. Im Moment muss ich meinen alertdialogBuilder für jeden Button neu einrichten, aber das ist nicht sehr flexibel.Wie füge ich mehrere Funktionen in einen Befehl ein?

Ich benutze diesen Code für meine alertDialogBuilder

public static void makeEditTextInputDialog(String caption, final Context mContext){ 
     LayoutInflater inflater = LayoutInflater.from(mContext); 
     View inputDialogView = inflater.inflate(R.layout.dialog_input_edittext, null); 

    AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
     builder.setView(inputDialogView); 

     final EditText etInput = (EditText) inputDialogView.findViewById(R.id.et_inputdialog); 
     final TextView tvCaption = (TextView) inputDialogView.findViewById(R.id.tv_inputdialog_caption); 

     tvCaption.setText(caption); 

     builder .setCancelable(true) 
       .setPositiveButton(R.string.apply, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

        } 
       }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 

     AlertDialog alertDialog = builder.create(); 
     alertDialog.show(); 
    } 

wie brauche ich meine Klasse oder Funktion einzurichten, so dass ich eine Funktion zu machen, wo ich wie

mehr Funktionen mit einem Punkt hinzufügen können

: makeInputDialog(caption,context).newFunction(param).changeTheTextOfAnotherTextView(desiredTextView);

+0

Builder Pattern ==> http://www.vogella.com/tutorials/DesignPatternBuilder/article.html –

Antwort

1

Sie sollten dies erreichen können, indem Sie Ihre Methoden jeweils this als eine Instanz der Builder-Klasse, die Sie erstellen, zurückgeben. Auf diese Weise können Sie die Anrufe zusammen mit '.'

Hier ist ein einfaches Beispiel:

class MessageBuilder { 
    String address = "unknown"; 
    String state = "unknown"; 
    String country = "unknown"; 

    MessageBuilder() {} 


    String show() { 
     return address + ", " + state + ", " + country; 
    } 

    MessageBuilder setAddress(String address) { 
     this.address = address; 
     return this; 
    } 

    MessageBuilder setState(String state) { 
     this.state = state; 
     return this; 
    } 

    MessageBuilder setCountry(String country) { 
     this.country = country; 
     return this; 
    } 
} 

Sie diese verwenden, indem die Set-Methoden Verkettungs zusammen:

MessageBuilder builder = new MessageBuilder(); 
    String msg = builder.setState("CA").setAddress("123 Main St.").show(); 
    Log.d("MessageBuilder", msg); 

..., die dieser im Protokoll erzeugt:

09-24 14:25:16.254 {...} D/MessageBuilder: 123 Main St., CA, unknown 
+0

Vielen Dank, das ist was ich gesucht für. –

Verwandte Themen