OK、正常に動作する複数選択の ListView があります。連絡先 (String[] に保持されている) のボックスをチェックすると、値を正常に返すことができます。たくさんの連絡先を持っている人もいるので、Android の電話帳のストックのような検索バーを作りたいと思いました。EditText を作成し、リストの上に配置しました。StackOverflow でフィルタリング コードを見つけましたが、素晴らしく機能します。
私の問題:
誰かの名前をフィルターで除外して名前を選択すると、EditText からバックスペースするか入力を続けると、選択した名前の正しい位置が保存されません。たとえば、「Adam」と入力し始めて「Ada」を選択すると、バックスペースで「Carol」と入力すると、「Ada」があった位置が選択されます。クリックから「アダム」がいた場所を収集し(2としましょう)、リストが復元されると、アダムがもうそこにいなくてもその位置(2)をチェックします。名前を収集する方法が必要です。その後、リストが復元または再度検索されると、Adam が以前にいた位置ではなく、名前 Adam がチェックされます。大量の配列を作成する以外にまったくアイデアがなく、本当に助けが必要です。以下は、私が使用しているコードの一部です。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_list);
myListView = (ListView)findViewById(android.R.id.list);
search_EditText = (EditText) findViewById(R.id.search_EditText);
search_EditText.addTextChangedListener(filterTextWatcher);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, ContactsList);
setListAdapter(adapter);
myListView.setItemsCanFocus(false);
getListView().setChoiceMode(2);
myListView.setTextFilterEnabled(true);
myListView.setFastScrollEnabled(true);
myListView.invalidate();
}
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
adapter.getFilter().filter(s);
}
};