2010-12-09 4 views
3

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

Répondre

1

Il semble que vous souhaitiez envoyer un message à un gestionnaire. Utilisez getMessage() pour obtenir l'objet Message , puis envoyez le message au gestionnaire via sa file d'attente de messages.

+0

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

2

Enregistrer les choses que vous voulez enregistrer dans onClickListener de votre Dialog. Utilisez dialog.findViewById() pour rechercher votre zone de texte, enregistrez le texte quelque part (ou utilisez Handler), puis dans Activité, récupérez le texte enregistré.

2

À moins que je ne manque quelque chose ici, une chaîne statique ne le fera-t-elle pas?

+0

yup il a fait pour mon cas. Mais la variable doit être déclarée au sommet de la classe. Y at-il de toute façon une variable locale peut être utilisée pour l'affectation? –

Questions connexes