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) {
}
});
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
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;
}
}
À 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.
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
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
}
});
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.
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();
}
}
});