Je travaille sur un projet pour l'université qui permet à un utilisateur de placer un point sur une carte, puis de définir le titre et la description de l'objet de superposition. Le problème est que la deuxième boîte EditText
écrase la première. Voici mon code pour la boîte de dialogue.
//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);
Toute aide serait appréciée!! Merci!
Une boîte de dialogue ne contient qu'une seule vue racine, c'est pourquoi setView()
écrase le premier texte d'édition. La solution est simple: mettez tout dans un ViewGroup, par exemple un 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
(Ceci est un exemple de base, mais il devrait vous aider à démarrer.)
Vous devriez prendre note de la différence de nomenclature entre une méthode set
et add
. setView()
ne contient qu'une seule vue, la même chose est identique pour setMessage()
. En fait, cela devrait être vrai pour chaque méthode set
, ce à quoi vous pensez sont des commandes add
. Les méthodes add
sont cumulatives, elles construisent une liste de tout ce que vous appuyez sur. Les méthodes set
sont uniques, elles remplacent les données existantes.
Vous pouvez construire votre mise en page qui contient deux EditText, la gonfler avec une LayoutInflater
et l'utiliser comme vue de votre 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();
vous pouvez ajouter votre EditText par programme aussi comme ceci:
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 pour créer un popup avec deux EditText avec 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();
}