AutoCompleteTextView n'affiche pas de liste déroulante lorsque j'appuie sur l'espace après avoir tapé un mot complet
Mon activité principale code:
//here you put all your data.
String[] dataArray = { "Amit sharma Kumar", "Hisham Kumar Munner",
"Vineet John Chaturvedi", "Lucky Kumar Verma" };
ArrayList<String> alAutoCompleteList;
AutoCompleteTextView acTV;
ArrayAdapter<String> adapter1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//etAuto = (EditText) findViewById(R.id.etAuto);
acTV = (AutoCompleteTextView) findViewById(R.id.acTV);
//Arraylist
alAutoCompleteList = new ArrayList<String>();
adapter1 = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_dropdown_item_1line, alAutoCompleteList);
acTV.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
//TODO Auto-generated method stub
if (acTV.enoughToFilter()) {
acTV.showDropDown();
acTV.bringToFront();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
//TODO Auto-generated method stub
alAutoCompleteList.clear();
}
@Override
public void afterTextChanged(Editable s) {
//TODO Auto-generated method stub
String acText = acTV.getText().toString().trim();
for (String item : dataArray) {
if (item.toLowerCase().contains(acText.toLowerCase())) {
alAutoCompleteList.add(item);
}
}
acTV.setThreshold(4);
acTV.setAdapter(adapter1);
acTV.showDropDown();
}
});
Quand je fais une recherche pour "sharma" et appuyez sur un espace après que les suggestions. Je veux ces suggestions pour y rester. J'ai essayé de tout faire, mais n'a pas obtenu aucun succès. Quelqu'un peut s'il vous plaît aider?
Edit:
Quelqu'un peut s'il vous plaît essayez ce code sur leurs émules? Il suffit d'ajouter une AutoCompleteTextView
en xml et de l'exécuter.
source d'informationauteur Hisham Muneer | 2012-10-16
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, est-il une raison pourquoi vous pouvez définir que
TextWatcher
auditeur sur lesAutoCompleteTextView
? Si vous avez fait cela pour filtrer les données vous-même, vous ne devriez pas le faire(parce que le widget ne présente par défaut et que votre code est incorrect).Ce qui se passe à cause de la carte et le défaut
Filter
de mise en œuvre qui vient avec elle, les éléments qui laAutoCompleteTextView
utilise sous le capot de fournir les valeurs que vous voyez dans la liste déroulante. Le comportement par défaut pour unArrayAdapter
est celui que vous voyez, vous pouvez trouver une explication dans cette réponse. La solution est de mettre en place votre propre carte avec un filtre qui va chercher l'ensemble de la carte des données de ligne pour la chaîne de filtre. J'ai pris le code de laArrayAdapter
classe à partir du SDK et fait un léger ajustement de sorte que le filtrage ne se casse pas lors de l'insertion d'une espace après un mot. Vous pouvez trouver la classe ici que le code est de gros à poste. Il suffit de copier la classe dans votre projet et l'utiliser comme un normalArrayAdapter
:Tout d'abord, vous n'avez pas besoin
TextWatcher
avecAutoCompleteTextView
parce queAutoCompleteTextView
a sa propre méthode pour regarder de texte c'est à direMyWatcher
. Vous devez utiliser :Vous n'avez pas besoin d'un Textwatcher, AutoCompleteTextView utilise le Filtre de la Carte que vous avez défini. La valeur par défaut de l'adaptateur de filtres d'entrées en appelant toString (). Naturellement, si l'utilisateur entre un espace, les valeurs ne correspondent plus. Pour mettre en œuvre ce comportement personnalisé, vous ne devez pas ajouter un textwatcher, mais construire un adaptateur personnalisé. Vous pouvez prolonger ArrayAdapter ou SimpleAdapter. Vous mettez en œuvre votre filtrage personnalisé comportement (dans votre cas, un trim ()) par le remplacement getFilter() et publishResults(). Ici ou ici vous pouvez trouver des exemples sur la façon de le faire.
Je pense qu'il y a problème dans le texte de l'observateur, parce que l'auto texte complet de la vue n'a pas besoin de texte de l'observateur, parce que l'auto écouteur d'événement . vous avez à simple passage de votre tableau dans à la carte au lieu de la liste. alAutoCompleteList il n'y a pas aucune valeur dans la liste. vous n'aviez jamais ajouter de la valeur dans la liste.
soit vous avez à faire comme :
alAutoCompleteList.add("données ");
alAutoCompleteList.ajouter (données"deux");
ou passer dataArray à la carte.
adapter1 = new ArrayAdapter(MainActivity.ce,
android.R.de mise en page.simple_dropdown_item_1line,dataArray );
Pas besoin d'utiliser le texte de l'observateur .