Je voulais utiliser AutoCompleteTextView dans mon Android. Je sais comment l'utiliser avec un simple tableau de chaînes, mais je voulais qu'AutoCompleteTextView utilise la liste des objets pour effectuer l'achèvement. Mon code pour cela suit :
CODE D'ACTIVITÉ
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
initialize();
ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,
R.layout.dropdown_list_item, GetAllStudentsList());
searchBox.setAdapter(adapter);
searchBox.setThreshold(THRESHOLD_VALUE);
searchBox.setTextColor(Color.BLACK);
}
searchBox.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long arg3) {
//Here i will grab the Student object that user selected from drop-down
}
});
public ArrayList<Movies> GetAllStudentsList() {
//This method returns a ArrayList of <Student> type objects
}
Élève objet de classe a des informations concernant un élève qui sont ID,NAME,ADDRESS,MARKS
.
Je sais qu'AutoCompleteTextView a besoin d'un tableau d'objets de type chaîne pour effectuer une opération de recherche.Dans mon cas, je veux qu'AutoCompleteTextView utilise ma liste de tableaux pour effectuer l'achèvement sur la base du champ d'objet étudiant NAME.Je ne sais pas comment dois-je spécifier AutoCompleteTextView pour utiliser le champ NAME de Objet étudiant.Veuillez m'aider à fournir un lien ou un petit exemple.
Merci
Deux façons:
Redéfinissez toString()
dans la classe Student
et faites-la retourner name
. Vous pouvez obtenir l'objet sélectionné avec le code suivant:
public static class Student {
private String name;
public Student(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
AutoCompleteTextView tv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
final ArrayList<Student> list = new ArrayList<MainActivity.Student>();
list.add(new Student("Viru"));
list.add(new Student("Gauti"));
ArrayAdapter<Student> adapter = new ArrayAdapter<MainActivity.Student>(
this, Android.R.layout.simple_dropdown_item_1line, list);
tv.setAdapter(adapter);
tv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Student selected = (Student) arg0.getAdapter().getItem(arg2);
Toast.makeText(MainActivity.this,
"Clicked " + arg2 + " name: " + selected.name,
Toast.LENGTH_SHORT).show();
}
});
Implémentez un adaptateur personnalisé (en étendant la classe BaseAdapter
ou ArrayAdapter<Student>
classe) Consultez ce didacticiel: http://www.ezzylearning.com/tutorial.aspx?tid=1763429
Vous pouvez utiliser un AbstractList
pour obtenir la représentation String
de chaque élément de votre liste d'objets.
private void setupAutoComplete(AutoCompleteTextView view, List<T> objects) {
List<String> names = new AbstractList<String>() {
@Override
public int size() { return objects.size(); }
@Override
public String get(int location) {
return objects.get(location).getName();
}
};
view.setAdapter(new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, names));
}
si vous voulez ajouter les données dans String [] arr = new String [100]; alors c'est faux. Vous pouvez faire le même travail que sous forme d'ArrayList mais n'oubliez pas que vous ne mettrez jamais ici une classe Getter/Setter. Déclarez-le simplement. Voir cet exemple.
Déclarez dans la partition principale:
ArrayList<String>arr=new ArrayList<>();
puis l'initier de cette façon:
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject1 = (JSONObject) jsonArray.get(i);
String imei = jsonObject1.getString("imei");
String name = jsonObject1.getString("name");
String my_pic = jsonObject1.getString("my_pic");
String email = jsonObject1.getString("email");
arr.add(name);
}
adapter= new ArrayAdapter<>
(this, Android.R.layout.select_dialog_item, arr);
autoCompleteText.setThreshold(1);//will start working from first character
autoCompleteText.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView
autoCompleteText.setTextColor(Color.RED);
}
J'espère que cela fonctionnera pour vous ....