web-dev-qa-db-fra.com

Élément sélectionné de la vue de texte à saisie semi-automatique Afficher comme texte simple?

J'utilise une vue à saisie semi-automatique qui affiche certains noms de la base de données.Je veux montrer un nom dans une vue de texte que j'ai sélectionnée à partir de la saisie de texte à complétion automatique.Voici mon code:

ArrayList<String> s1 = new ArrayList<String>();

      for (StudentInfo cn : studentInfo) {
            s1.add(cn.getName());
        }
        ArrayAdapter<String> adapter =  new ArrayAdapter<String>(this, Android.R.layout.simple_dropdown_item_1line,s1); 
       a1.setThreshold(1); 
        a1.setAdapter(adapter);

a1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
    }
        });
9
bhoot4242

Essayez de cette façon:

AutoCompleteTextView a1 = (AutoCompleteTextView) findViewById(...);

StudentInfo[] s1 = studentInfo.toArray(new StudentInfo[studentInfo.size()]);

ArrayAdapter<StudentInfo> adapter = new ArrayAdapter<StudentInfo>(this, Android.R.layout.simple_dropdown_item_1line, s1);
a1.setAdapter(adapter);
a1.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
        Object item = parent.getItemAtPosition(position);
        if (item instanceof StudentInfo){
        StudentInfo student=(StudentInfo) item;
            doSomethingWith(student);
        }
    }
});

ArrayAdapter utilise la méthode toString () de StudentInfo pour générer les textes affichés. Vous devez donc implémenter une méthode Nice toString.

De cette façon, ce type d'implémentation peut être adapté à tout type d'objet.

Btw .: je préfère Android.R.layout.simple_spinner_dropdown_item au lieu de Android.R.layout.simple_dropdown_item_1line

11
Stephan Richter

Gratitude à Stefan Richter! J'aimerais ajouter qu'il est possible d'utiliser List<T> directement lorsque vous construisez l'adaptateur:

AutoCompleteTextView autoCompleteTextView = dialogView.findViewById(R.id.autoComplete);
            // Where mStudentsInfo is List<StudentInfo>
            ArrayAdapter<StudentInfo> adapter = new ArrayAdapter<>(this, Android.R.layout.simple_dropdown_item_1line, mStudentsInfo);
            autoCompleteTextView.setAdapter(adapter);
            autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Object item = parent.getItemAtPosition(position);
                    if (item instanceof StudentInfo) {
                        StudentInfo studentInfo = (StudentInfo) item;
                        // do something with the studentInfo object
                    }
                }
            });

Et n'oubliez pas de surcharger la méthode toString() dans StudentInfo.class:

public class StudentInfo {

....

    @Override
    public String toString() {
        return studentName;
    }
}
3
Ivo Stoyanov

À partir de l'objet de vue arg1 récupère la valeur de la chaîne. À partir de la liste de tableaux fournie à AutoCompleteTextView, obtenez la position de l'élément à l'aide de cette chaîne.

dans votre cas, le code ressemblerait à quelque chose comme ci-dessous.

int selectedPos = s1.indexOf ((String) ((TextView) arg1) .getText ());

selectedPos est la position de la chaîne dans la liste de tableaux fournie.

3
Srikanth Reddy

votre s1 contient tous les noms de database

a1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
            Log.d("your selected item",""+s1.get(position));
            //s1.get(position) is name selected from autocompletetextview
            // now you can show the value on textview. 
    }
        });

espérons que cela vous aidera

3

remplacer la méthode toString pour la classe de modèle (StudenInfo dans ce cas) n'est pas une bonne idée!
Si vous souhaitez uniquement obtenir le texte de l'élément sélectionné, utilisez ce code: 

 autoCompleteView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String selectedItem = (String) parent.getItemAtPosition(position);
                // here is your selected item
            }
        });
2
Ali Sherafat

Pour obtenir l'élément sélectionné dans la sélection à complétion automatique qui utilise un type de données défini par l'utilisateur et définit les valeurs de la liste associée. Le code suivant a fonctionné pour moi

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long arg3) {
    int selectedPos = getYourList().indexOf((((TextView)view).getText()).toString());
    SomeDAO dao = getSomeDaoList().get(selectedPos);
    //do your code
}

Remarque: J'ai modifié les noms de paramètres par défaut dans onItemClick tels que arg0-parent, arg1-view, arg2-position et SomeDAO est un type de données défini par l'utilisateur.

1
priyanka_rao

Utiliser la position parent est '0'

  txt_search.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {
            Object item = parent.getItemAtPosition(0);
            if (item instanceof MYData{
                MYData data=(MYData) item;
                String dd = data.getName();
            }
        }
    });
0