Mehrere EditText-Objekte in AlertDialog

Lesezeit: 4 Minuten

Benutzer-Avatar
Tom Selleck

Ich arbeite an einem Projekt für das College, bei dem ein Benutzer einen Punkt auf einer Karte platzieren und dann den Titel und die Beschreibung für das Overlay-Objekt festlegen kann. Das Problem ist das zweite EditText Box überschreibt die erste. Hier ist mein Code für das Dialogfeld.

//Make new Dialog
AlertDialog.Builder dialog = new AlertDialog.Builder(mapView.getContext());
dialog.setTitle("Set Target Title & Description");
dialog.setMessage("Title: ");

final EditText titleBox = new EditText(mapView.getContext());
dialog.setView(titleBox);

dialog.setMessage("Description: ");
final EditText descriptionBox = new EditText(mapView.getContext());
dialog.setView(descriptionBox);

Jede Hilfe wäre willkommen!! Vielen Dank!

Benutzer-Avatar
Sam

Aus diesem Grund enthält ein Dialog nur eine Root-Ansicht setView() überschreibt den ersten EditText. Die Lösung ist einfach alles in eine ViewGroup zu packen, zum Beispiel ein LinearLayout:

Context context = mapView.getContext();
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);

// Add a TextView here for the "Title" label, as noted in the comments
final EditText titleBox = new EditText(context);
titleBox.setHint("Title");
layout.addView(titleBox); // Notice this is an add method

// Add another TextView here for the "Description" label
final EditText descriptionBox = new EditText(context);
descriptionBox.setHint("Description");
layout.addView(descriptionBox); // Another add method

dialog.setView(layout); // Again this is a set method, not add

(Dies ist ein einfaches Beispiel, aber es sollte Ihnen den Einstieg erleichtern.)

Beachten Sie den Nomenklaturunterschied zwischen a set und add Methode. setView() hält nur eine Ansicht, das gleiche gilt für setMessage(). Das sollte eigentlich für jeden gelten set Methode, woran Sie denken, sind add Befehle. add Methoden sind kumulativ, sie erstellen eine Liste von allem, was Sie währenddessen eingeben set Methoden sind singulär, sie ersetzen die vorhandenen Daten.

  • Ah, das ist brillant, danke, genau das, wonach ich gesucht habe, eine Frage: Gibt es eine Möglichkeit, über jedes Textfeld zu schreiben? Wie “Titel:” dann “Beschreibung:” ??

    – Tom Selleck

    13. Oktober 2012 um 20:52 Uhr


  • @Tomcelic ja, du kannst es tun, füge einfach der Reihe nach ein TextView, EditText, TextView und schließlich ein EditText hinzu, aber ich denke, die Verwendung des layoutInflator wäre besser

    – K_Anas

    13. Oktober 2012 um 21:02 Uhr


  • LinearLayout.VERTICAL OMG, ich wollte alles aus dem Fenster werfen und vor Qual schreien!!!

    – Schockwelle

    21. September 2018 um 16:03 Uhr

Sie können Ihr Layout erstellen, das zwei EditText enthält, und es mit einem aufblasen LayoutInflater und verwenden Sie das als Ihre Ansicht AlertDialog.

LayoutInflater factory = LayoutInflater.from(this);

//text_entry is an Layout XML file containing two text field to display in alert dialog
final View textEntryView = factory.inflate(R.layout.text_entry, null);

final EditText input1 = (EditText) textEntryView.findViewById(R.id.EditText1);
final EditText input2 = (EditText) textEntryView.findViewById(R.id.EditText2);


input1.setText("DefaultValue", TextView.BufferType.EDITABLE);
input2.setText("DefaultValue", TextView.BufferType.EDITABLE);

final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setIcon(R.drawable.icon).setTitle("EntertheText:").setView(textEntryView).setPositiveButton("Save",
  new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog,
     int whichButton) {

    Log.i("AlertDialog","TextEntry 1 Entered "+input1.getText().toString());
    Log.i("AlertDialog","TextEntry 2 Entered "+input2.getText().toString());
    /* User clicked OK so do some stuff */
   }
  }).setNegativeButton("Cancel",
  new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog,
     int whichButton) {
     /*
     * User clicked cancel so do some stuff
     */
   }
  });
alert.show();

Geben Sie hier die Bildbeschreibung ein

Sie können Ihren EditText auch programmgesteuert wie folgt hinzufügen:

LinearLayout layout = new LinearLayout(mapView.getContext());
layout.setOrientation(LinearLayout.VERTICAL);

final EditText titleBox = new EditText(mapView.getContext());
titleBox.setHint("Title");
layout.addView(titleBox);

final EditText descriptionBox = new EditText(mapView.getContext());
descriptionBox.setHint("Description");
layout.addView(descriptionBox);

dialog.setView(layout);

  • Im Ernst, jede Antwort sollte ein Bild des Ergebnisses enthalten. Ich habe nach so etwas gegoogelt. Und ich habe dieses Bild gesehen. Sofort angeklickt.

    – Hochverehrter Herr

    16. Juli 2018 um 20:10 Uhr

val alert = AlertDialog.Builder(this)
    alert.setTitle("Buy Airtime")
    alert.setMessage("Enter phone details and amount to buy airtime.")

    val layout = LinearLayout(this)
    layout.orientation = LinearLayout.VERTICAL

    val mobileNoET = EditText(this)
    mobileNoET.setSingleLine()
    mobileNoET.hint = "Mobile Number"
    layout.addView(mobileNoET)

    val amountET = EditText(this)
    amountET.setSingleLine()
    amountET.hint = "Amount"
    layout.addView(amountET)

    val networkET = EditText(this)
    networkET.setSingleLine()
    networkET.hint = "Network"
    layout.addView(networkET)

    layout.setPadding(50, 40, 50, 10)

    alert.setView(layout)

    alert.setPositiveButton("Proceed") { _, _ ->
        val mobileNo = mobileNoET.text.toString()
        val amount = amountET.text.toString()
        val network = networkET.text.toString()

        Log.i("xxx",mobileNo )
        Log.i("xxx",amount )
        Log.i("xxx",network )

        Toast.makeText(this, "Saved Sucessfully", Toast.LENGTH_LONG).show()
    }

    alert.setNegativeButton("Cancel") { dialog, _ ->
        dialog.dismiss()
    }

    alert.setCancelable(false)
    alert.show()

Benutzer-Avatar
Zuko

Code zum Erstellen eines Popups mit zwei EditText mit Xamarin

    public void dial()
    {

        AlertDialog alerta = new AlertDialog.Builder(this).Create();
        LinearLayout layout = new LinearLayout(this);

                   layout.Orientation = Orientation.Vertical;


        EditText factinput = new EditText(this);
        alerta.SetMessage("Facturas Disponibles:");
        layout.AddView(factinput);

        EditText canttinput = new EditText(this);
        alerta.SetMessage("Cantidad:");
        layout.AddView(canttinput);

        alerta.SetView(layout);


        alerta.SetButton("Cancelar", (a, b) =>
        {

            AlertDialog cencelacion = new AlertDialog.Builder(this).Create();
            cencelacion.SetMessage("Desea Cancelar");
            cencelacion.SetButton("OK", (c, d) => { });
            cencelacion.Show();

        });
        alerta.SetButton2("Aceptar", (ee, f) =>
        {
            AlertDialog confirmacion = new AlertDialog.Builder(this).Create();
            confirmacion.SetMessage("Realizar Busqueda de Factura");
            confirmacion.SetButton("OK", (c, d) => { });
            confirmacion.Show();
        }
        );

        alerta.Show();

    }

1101230cookie-checkMehrere EditText-Objekte in AlertDialog

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy