问题
I wanted to use AutoCompleteTextView in my android application.I know how to use it with simple array of Strings, but I wanted AutoCompleteTextView to use list of Objects to perform completion.My code for this is following:
ACTIVITY CODE
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
}
Student class Object has information regarding a student which is ID,NAME,ADDRESS,MARKS
.
I know AutoCompleteTextView needs an array of String type object to perform search operation.In my case I want AutoCompleteTextView to use my ArrayList to perform completion on the basis of Student object field NAME.I dont know how should I specify AutoCompleteTextView to use NAME field of Student object.Please help me providing any Link or a small example.
Thanks
回答1:
Two ways:
Override
toString()
inStudent
class and make it returnname
. You can get the object that was selected with the following code: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(); } });
Implement a custom adapter (by extending
BaseAdapter
class orArrayAdapter<Student>
class) Check this tutorial : http://www.ezzylearning.com/tutorial.aspx?tid=1763429
回答2:
You can use an AbstractList
to get the String
representation of each item in your object list.
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));
}
回答3:
if you are wanna add the data in String[] arr=new String[100]; then its wrong. You can do the same work as in form of ArrayList but remember you will never put here a Getter/Setter class. Just simply declare it. See this example.
Declare in main partition:
ArrayList<String>arr=new ArrayList<>();
and then initilize it in this way:
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);
}
I hope this will work for you....
来源:https://stackoverflow.com/questions/13063849/using-android-autocompletetextview-with-arrayadapterobjects-instead-of-arrayad