2016-11-18 2 views
0

J'ai un AutoCompleteTextView dans un fragment (android.support.v4.app). Une fois que l'utilisateur a sélectionné un élément dans la liste déroulante, je souhaite conserver le texte entré. Voici ce que j'ai.Impossible d'obtenir le texte saisi par l'utilisateur depuis android AutoCompleteTextView after item selected

D'abord la définition de la classe:

public class MyFragment extends Fragment 
implements 
    AutoCompleteTextView.OnDismissListener, 
    AutoCompleteTextView.OnKeyListener, 
    AutoCompleteTextView.OnEditorActionListener { 

En onViewCreated() J'ai ces missions:

myAutoComplete.setOnDismissListener(MyFragment.this); 
    myAutoComplete.setOnKeyListener(MyFragment.this); 
    myAutoComplete.setOnEditorActionListener(MyFragment.this); 

Et j'ai ajouté ces méthodes:

@Override 
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { 
    Log.i("************(arg0) ", arg0.toString()); 
    Log.i("************(arg1) ", arg0.toString()); 
    Log.i("***********(keyevent) ", arg2.toString()); 
    return false; 
} 

@Override 
public boolean onKey(View arg0, int arg1, KeyEvent arg2) { 
    Log.i("************(arg0) ", arg0.toString()); 
    Log.i("************(arg1) ", arg0.toString()); 
    Log.i("***********(keyevent) ", arg2.toString()); 
    return false; 
} 

@Override 
public void onDismiss() { 
    // Fires when the dropdownlist is dismissed. 
    // The event is assigned in onViewCreated 
} 

Mon premier espoir était que l'événement onDismiss() se déclencherait avant que le texte entré par l'utilisateur soit remplacé par l'élément sélectionné. L'événement, comme indiqué, se déclenche correctement, mais après que le texte des utilisateurs a été remplacé par l'élément sélectionné.

J'ai ensuite câblé deux écouteurs de clés différents, dans l'espoir de capturer et de stocker la valeur pendant la saisie. Ceux-ci ne tirent pas. Après avoir étudié ce problème, j'ai appris que les auditeurs principaux étaient uniquement conçus pour travailler sur des claviers physiques. Bien que certaines personnes semblent l'avoir fait fonctionner avec des kybds souples, une large compatibilité semble être un problème.

Alors je suis coincé, et je n'ai plus de cheveux. Quelqu'un a des suggestions?

+0

pourquoi ne pas essayer TextWatcher et enregistrer le texte entré dans une chaîne temporaire –

Répondre

1

@Rushi Ayyappa est bon usage TextWatcher

autoCompleteTextView1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(){ 
      if(isSpinnerAlreadySelected){ 
       autoCompleteTextView1.setEnabled(true); 
       autoCompleteTextView1.performClick(); 
      } 
     }); 


autoCompleteTextView1.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      if(isSpinnerAlreadySelected){ 
       autoCompleteTextView1.setEnabled(false); 
       //Notify the user he cannot type and why?? Toast?? 
      } 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
+0

@Rushi, vous aviez raison. beforeTextChanged() contient la valeur désirée après que l'utilisateur a sélectionné une valeur dans la liste déroulante. Je suis nouveau à Android, mais j'ai lu un fil qui m'a fait penser que TextWatcher ne serait pas sûr à long terme, donc je ne l'ai pas exploré plus profondément ... désolé, je ne trouve pas le fil maintenant. –

+0

marcos, merci pour le code. Je ne semble pas avoir besoin de l'événement onClick ou isSpinner ... conditionnel, mais le modèle de bloc de code a été très utile. THX. –