MultiAutoCompleteTextView 用のカスタム アダプターを作成しました。これにより、リスト ビューのビューが表示されます。問題は、任意の文字を入力すると正しいカウントが得られるが、開始インデックスが 0 から始まるため、間違った名前が表示されることです。
String[] personsList = {"Rahul", "Mike", "Mantu","Mathew", "Gatr", "Ahamad"};
AutoCompleteNameAdaptor autoCompleteAdaptor = new AutoCompleteNameAdaptor(getApplicationContext(), personsList);
CustomMultiAutoCompleteTextView personName = (CustomMultiAutoCompleteTextView) findViewById(R.id.allPeopleInvolved);
personName.setThreshold(1);
personName.setAdapter(autoCompleteAdaptor);
personName.setTokenizer(new CustomMultiAutoCompleteTextView.CommaTokenizer());
リスト ビューを開くと、「m」と入力しても常に「Rahul から始まるリスト アイテム」が表示されますが、カウントは 3 のままなので、アイテム 0 から 3 つのアイテムが表示されます。
これは、Android arrayAdaptor で正常に動作しています。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, personsList);
アダプタの getView 関数で正しいインデックスが渡されない理由を確認するためにデバッグする必要がありますか、またはリストを並べ替えてアダプタで再度更新するための並べ替えアルゴリズムをセットアップする必要がありますか?
カスタム アダプター コード
public class AutoCompleteNameAdaptor extends ArrayAdapter<String> {
LayoutInflater inflater;
String[] listItems;
public AutoCompleteNameAdaptor(Context context, String[] objects) {
super(context, R.layout.people_involved_autocomplete_list, objects);
this.listItems = objects;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
GenericItemViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.people_involved_autocomplete_list, parent, false);
holder = new GenericItemViewHolder();
holder.personNameLabel = (TextView) convertView.findViewById(R.id.personName);
holder.personNameLabel.setText(this.listItems[position]);
convertView.setTag(holder);
} else {
holder = (GenericItemViewHolder)convertView.getTag();
}
return convertView;
}
@Override
public String getItem(int position) {
return this.listItems[position];
}
public static class GenericItemViewHolder {
public TextView personNameLabel;
public ImageView personNameImage;
}
}