私はAndroidアプリケーションでAutoCompleteTextViewを使用したかった。文字列の単純な配列でそれを使用する方法を知っているが、AutoCompleteTextViewは補完を実行するためにオブジェクトのリストを使用したかった。 :
アクティビティコード
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には、ID,NAME,ADDRESS,MARKS
。
AutoCompleteTextViewには、検索操作を実行するためにString型のオブジェクトの配列が必要であることがわかっています。私の場合、AutoCompleteTextViewでArrayListを使用して、StudentオブジェクトフィールドNAMEに基づいて補完を実行する必要があります。学生オブジェクト。リンクまたは小さな例を提供してください。
ありがとう
二通り:
Student
クラスのtoString()
をオーバーライドし、name
を返すようにします。次のコードで選択されたオブジェクトを取得できます。
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();
}
});
カスタムアダプターを実装する(BaseAdapter
クラスまたはArrayAdapter<Student>
class)このチュートリアルを確認してください: http://www.ezzylearning.com/tutorial.aspx?tid=1763429
AbstractList
を使用して、オブジェクトリスト内の各アイテムのString
表現を取得できます。
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));
}
string [] arr = new String [100];にデータを追加する場合その後、間違っています。 ArrayListの形式と同じ作業を行うことができますが、ここには決してGetter/Setterクラスを配置しないことを忘れないでください。単に宣言するだけです。この例をご覧ください。
メインパーティションで宣言します。
ArrayList<String>arr=new ArrayList<>();
そして、次のように初期化します:
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);
}
私はこれがあなたのために働くことを望みます....