j'ai un AutoCompleteTextView dans mon application qui fonctionne. J'ai créé avec succès un onClickItemListener. La question est de savoir comment saisir le texte sélectionné par l'utilisateur. Et voici le problème: j'ai une liste de tableaux avec des mots transmis à l'adaptateur pour rechercher des suggestions. Lorsque l'utilisateur tape un mot, la liste de suggestions devient plus courte (en lignes du côté de l'interface utilisateur). Ainsi, lorsque je veux obtenir le mot à partir de ArrayList à l'index que l'utilisateur a sélectionné, je me trompe de mot car les index ne correspondent pas. Comment puis-je obtenir le texte (chaîne) choisi par l'utilisateur sans avoir à jouer avec l'index? Voici mon code:
public class AutocompleteActivity extends BaseActivity {
private DBManager m_db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autocomplete);
m_db = new DBManager(this);
final ArrayList<String> words = m_db.selectAllWords();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, words);
AutoCompleteTextView tv = (AutoCompleteTextView)findViewById(R.id.autocomplete);
tv.setThreshold(1);
tv.setAdapter(adapter);
tv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.i("SELECTED TEXT WAS------->", words.get(arg2));
}
});
}
}
arg0
étant votre AdapterView
et arg2
la position.
As-tu essayé:
arg0.getItemAtPosition(arg2);
Ouais ... malheureusement, les noms des paramètres de la méthode onItemClick que vous devez implémenter ne sont pas très descriptifs, mais voici un exemple avec les noms de ce qu'ils sont:
autoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
String selection = (String)parent.getItemAtPosition(position);
//TODO Do something with the selected text
}
});
Pour plus d'informations, voir: http://developer.Android.com/reference/Android/widget/AdapterView.OnItemClickListener.html
Je pense que ce que vous recherchez est ceci.
String s = this.mCountry.getEditableText().toString();
Où mCountry
est la AutoCompleteTextView
.
this.mCountry = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
ArrayAdapter<String> adapterCountry = new ArrayAdapter<String>(this, R.layout.list_item, countries);
this.mCountry.setAdapter(adapterCountry);
mCountry
est la liste des pays et je souhaitais sauvegarder le pays sélectionné dans SharedPreferences
.
J'espère que cela t'aides.
Le plus facile de tous
Pour obtenir le texte de la suggestion sélectionnée dans AutoCompleteTextView, utilisez cette
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
essaye ça:
txtPurpose.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Purpose selected = (Purpose) arg0.getAdapter().getItem(arg2);
txtPurpose.setTag(selected);
}
});
Obtenir un texte de suggestion sélectionné dans AutoCompleteTextView
est un autre exemple.
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id)
{
TextView txtvw=(TextView) view;
String str=txtvw.getText().toString();
int index = contactNames.indexOf(str);
}
Voici le code qui va résoudre le problème.
private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
int index = (int) view.getTag();
Object item = parent.getItemAtPosition(index);
if (item instanceof SearchItemShareConnectionDAO) {
SearchItemShareConnectionDAO dao = (SearchItemShareConnectionDAO) item;
}
}
};
SetTag (Dao.getPosition) dans la méthode getView () de l'adaptateur.
Il existe également un moyen d'obtenir un élément en dehors de onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
attention, int getListSelection()
peut renvoyer ListView.INVALID_POSITION
s'il n'y a pas de liste déroulante ou s'il n'y a pas de sélection.
Pour obtenir le texte de l'élément affiché sélectionné par l'utilisateur
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String selectedItemText = arg0.getItemAtPosition(arg2);
Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]);
}
En suivant les meilleures pratiques, veuillez utiliser une forme de nomenclature descriptive pour vos variables, votre code sera plus logique:
public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)