I\'m working on a project for college that will let a user place a point on a map and then set the title and description for the overlay object. The problem is, the second <
A Dialog only contains one root View, that's why setView()
overwrites the first EditText. The solution is simple put everything in one ViewGroup, for instance a 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
(This is a basic example, but it should get you started.)
You should take note of the nomenclature difference between a set
and add
method. setView()
only holds one View, the same is similar for setMessage()
. In fact this should be true for every set
method, what you're thinking of are add
commands. add
methods are cumulative, they build a list of everything you push in while set
methods are singular, they replace the existing data.
You can build your layout that contains two EditText, inflate it with a LayoutInflater
and use that as the View of your 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();
you can add your EditText programmatically too like this:
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);
Code for create a popup with two EditText using 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();
}