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));
            }
        });
    }
}
Était-ce utile?

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();

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top