OK У меня есть многократный выбор ListView, который отлично работает. Я проверяю флажки для контактов (хранящихся в String []) и могу вернуть значения в порядке. Поскольку у некоторых людей есть куча контактов, я хотел создать такую панель поиска, как запасной для телефонной книги Android. Я создал EditText и выровнял его над моим списком. Я нашел код фильтрации здесь, в StackOverflow, и он отлично работает.
Моя проблема:
Когда вы отфильтровываете имя someones, и вы выбираете имя, когда вы либо переходите из EditText, либо продолжаете вводить текст, правильная позиция выбранного вами имени не сохраняется. Например, если я начну набирать "Адам" и перейду к "Аде" и выберем его, если я вернусь к типу в "Кэрол", любая позиция "Ада" была выбрана. Он собирает место, в котором "Адам" находился на клике (пусть говорят 2), и когда список восстанавливается, проверяет эту позицию (2), хотя Адама больше нет. Мне нужен способ для сбора имени. Затем, когда список будет восстановлен или снова просмотрен, NAME Adam проверяется, а не POSITION 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);
}
};