データベースからいくつかの名前を表示するオートコンプリートテキストビューを使用しています。オートコンプリートテキストビューから選択したテキストビューに名前を表示したいのですが、これが私のコードです。
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) {
}
});
このようにしてみてください:
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はStudentInfoのtoString()メソッドを使用して表示されるテキストを生成するため、Nice toStringメソッドを実装する必要があります。
このように、この種の実装は、どのオブジェクトタイプにも適応できます。
ところで:Android.R.layout.simple_dropdown_item_1lineの代わりにAndroid.R.layout.simple_spinner_dropdown_itemを好む
ステファン・リヒターに感謝!アダプターを構築するときに_List<T>
_を直接使用することが可能であることを追加したいと思います。
_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
}
}
});
_
また、_StudentInfo.class
_のtoString()
メソッドをオーバーライドすることを忘れないでください。
_public class StudentInfo {
....
@Override
public String toString() {
return studentName;
}
}
_
ビューオブジェクトからarg1文字列の値を取得します。 AutoCompleteTextViewに提供されたArrayListから、この文字列を使用してアイテムの位置を取得します。
あなたの場合、コードは以下のようになります。
int selectedPos = s1.indexOf((String) ((TextView) arg1).getText());
selectedPos
は、指定されたArrayList内の文字列の位置です。
モデルクラス(この場合はStudenInfo)のtoString
メソッドをオーバーライドすることはお勧めできません。
選択したアイテムのテキストのみを取得する場合は、次のコードを使用します:
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
}
});
きみの s1
には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.
}
});
これがあなたに役立つことを願って、
ユーザー定義のデータ型を使用し、関連リストの値を設定するオートコンプリート選択から選択されたアイテムを取得するには、次のコードが機能しました
@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
}
注:onItemClickのデフォルトのパラメーター名をarg0-parent、arg1-view、arg2-positionに変更しました。SomeDAOはユーザー定義のデータ型です。
親の位置を「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();
}
}
});