Je pensais que ce serait facile, mais il m'échappe. J'ai une activité qui affiche une boîte de dialogue personnalisée qui permet à l'utilisateur d'entrer du texte, puis a OK et le bouton Annuler défini. Je l'affiche en utilisant show(). Mais je n'arrive pas à comprendre comment récupérer la valeur du dialogue.Android - comment une activité peut-elle obtenir un texte saisi par l'utilisateur à partir d'un dialogue?
J'utilise une boîte de dialogue personnalisée car elle effectue une validation de l'entrée de texte. Je suppose que je pourrais le changer pour dériver de l'activité et l'afficher en utilisant startActivityForResult mais - au moins basé sur mes vieux jours de programmation Windows - je pensais que récupérer une valeur entrée par un utilisateur à partir d'une boîte de dialogue Android serait facile. Est-ce que je néglige un type de mécanisme de rappel ou d'écoute?
J'ai même essayé cela comme une solution simple, mais il ne me laisse pas assigner à value (1) à moins que son modificateur ne soit défini sur final et (2) si je dis ok pour le rendre final, je ne vais pas me laisser affecter à elle parce que « la valeur de la variable locale finale ne peut pas être attribué, car il est défini dans un type englobante »
String value;
final EditText input = (EditText)findViewById(R.id.theText);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
value = input.getText().toString();
dialog.dismiss();
}
});
builder.show();
[EDIT mis à jour pour la solution] =============== =============
La chose principale que j'ai fini par faire était d'ajouter la possibilité de passer un gestionnaire à la boîte de dialogue. Dans la classe de dialogue I ajouté:
private Handler clientHandler = null;
public void AddHandler(Handler client)
{
this.clientHandler = client;
}
et mis à jour sur le bouton OK de dialogue, cliquez sur:
/**
* The user pressed the OK button
* @param v
*/
public void okClick(View v)
{
// save the entered string
this.tag = this.tagEditText.getText().toString();
if (null != this.clientHandler)
{
// Notify the client to update itself
this.clientHandler.sendMessage(clientHandler.obtainMessage());
}
cancel();
}
Puis, dans onCreate() de l'activité qui affiche la boîte de dialogue I ajouté:
tagDialog = new tagDialog(this);
tagHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
tag = tagDialog.tag;
}
};
tagDialog.AddHandler(tagHandler);
Toutes ces suggestions ont été excellentes, mais celle-ci est celle qui m'a permis de résoudre le problème. Je suppose qu'il s'avère que ce n'est pas aussi facile d'obtenir les données d'un dialogue que j'espérais. Je posterai le code de ma solution finale. Merci tout le monde – bursk