Comment obtenir un texte de AutoCompleteTextView?
-
26-10-2019 - |
Question
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 c'est la chose: j'ai un ArrayList
avec des mots étant passés à la Adapter
pour rechercher des suggestions. Comme les types d'utilisateur un mot de la liste des suggestions se raccourcit (en lignes sur le côté de l'interface utilisateur) alors quand je veux obtenir le mot de la ArrayList
à l'index sélectionné par l'utilisateur je reçois le mauvais mot parce que les index ne correspond pas.
Comment puis-je obtenir le texte (String
), l'utilisateur a choisi sans avoir à jouer avec l'indice?
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));
}
});
}
}
La solution
arg0
étant votre AdapterView
et arg2
la position.
Avez-vous essayé:
arg0.getItemAtPosition(arg2);
Autres conseils
Ouais ... Malheureusement, le nom des paramètres sur la méthode onItemClick vous devez mettre en œuvre ne sont pas si l'auto-descriptif, 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
}
});
- Le parent AdapterView où le clic est arrivé.
- La vue à l'intérieur le AdapterView qui a été cliqué (ce sera une vue fournie par le Adaptateur)
- Position La position de la vue dans l'adaptateur
- id L'ID de ligne de l'élément qui a été cliqué.
Pour plus d'informations, voir: http://developer.android.com /reference/android/widget/AdapterView.OnItemClickListener.html
Je pense que ce que vous recherchez est cela.
String s = this.mCountry.getEditableText().toString();
Où mCountry
est le 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
la liste des pays, et je voulais sauver le pays sélectionné dans SharedPreferences
.
Hope this helps.
plus facile de tous
Pour Obtenir texte de la suggestion sélectionnée dans AutoCompleteTextView utiliser
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
essayez ceci:
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);
}
});
Un autre d'obtenir le texte de la suggestion sélectionnée dans AutoCompleteTextView
est
@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.
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+"]);
}
Après les meilleures pratiques, s'il vous plaît utiliser une certaine forme de nomenclature descriptive pour vos variables, votre code aura plus de sens:
public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)
Il y a aussi un moyen d'obtenir l'article en dehors du onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
méfiez-vous que int getListSelection()
peut retourner ListView.INVALID_POSITION
s'il n'y a pas ou si la liste déroulante il n'y a pas de sélection.