web-dev-qa-db-fra.com

comment obtenir du texte depuis autocompletetextview android

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));
            }
        });
    }
}
28
madcoderz

arg0 étant votre AdapterView et arg2 la position.

As-tu essayé:

arg0.getItemAtPosition(arg2);
39
djg

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
    }
});
  • parent L'adaptateur où le clic s'est produit.
  • view La vue dans l'adaptateur sur lequel l'utilisateur a cliqué (ce sera une vue fournie par l'adaptateur )
  • position La position de la vue dans l'adaptateur
  • id L'identifiant de la ligne de l'élément sur lequel l'utilisateur a cliqué.

Pour plus d'informations, voir: http://developer.Android.com/reference/Android/widget/AdapterView.OnItemClickListener.html

44
Oscar Salguero

Je pense que ce que vous recherchez est ceci.

String s = this.mCountry.getEditableText().toString();

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.

8
Ammar Bukhari

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());
        }
    });
4
RatneZ

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);
        }
    });
3
Mortada Issa

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);
} 
2
Jasmine John

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.

1
Shivang

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.

0
YTerle

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) 
0
tony gil