2011-01-30 5 views
0

J'ai créé un adaptateur de matrice personnalisé pour lier une ligne personnalisée contenant du texte statique et un EditText modifiable. J'essaie de m'enregistrer pour être averti lorsque l'utilisateur change le texte dans le texte d'édition et lorsqu'il est notifié pour déterminer quelle ligne ArrayList correspond à l'EditText modifié. Dans le passé, avec d'autres types de vues tels qu'un Spinner, je pouvais simplement mettre une référence à la vue parent et le numéro de ligne dans la balise pour la vue Spinner. Et puis, quand j'ai été informé que la valeur a changé, j'ai lu la balise pour déterminer comment la corréler à l'ArrayList maître. Le problème avec l'enregistrement d'être notifed avec une modification EditText est que vous ne récupérez pas une vue mais à la place obtenez un TextWatcher et je n'ai aucun moyen de corréler à la ligne parent ou à la ligne ArrayList.Android EditText dans un ListView

Quelle est la technique que vous devez utiliser dans cette circonstance?

Répondre

1

Vous pouvez utiliser onEditorAction sur votre EditText dans votre ArrayAdapter:

mEditText.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { 
     // Parse parent tree to find position of view 
     int position = 0; 
     View v = null; 
     while (view != v && position < mListView.getChildCount()) 
      v = mListView.getChildAt(position++); 
     // do something 
     something(position); 
     // do not consume the action 
     return false; 
} 
}); 

Notez que l'utilisation de cette méthode, vous allez déclencher un événement uniquement lorsque l'utilisateur appuie sur « ok », « enter », « fait » , etc. sur le clavier.