it-swarm.com.de

Mehrere EditText-Objekte in AlertDialog

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-Feld überschreibt das 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 dankbar !! Vielen Dank!

39
TomSelleck

Ein Dialog enthält nur eine Hauptansicht, deshalb überschreibt setView() den ersten EditText. Die Lösung ist einfach, alles in einer ViewGroup, beispielsweise einem 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 einer set- und einer add-Methode. setView() hat nur eine Ansicht, das gleiche gilt für setMessage(). In der Tat sollte dies für jede set-Methode zutreffen, woran Sie denken, sind add-Befehle. add-Methoden sind kumulativ. Sie erstellen eine Liste mit allem, was Sie drücken, während set-Methoden Singular sind.

88
Sam

Sie können Ihr Layout mit zwei EditText erstellen, es mit einer LayoutInflater aufpumpen und dieses als Ansicht Ihrer AlertDialog verwenden.

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();

enter image description here

sie können Ihren EditText auch wie folgt programmgesteuert 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);
8
K_Anas

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();

    }
0
Zuko