Multiple Choice ListViewableViewView
OK Tengo un ListView de opción múltiple que funciona bien. Marco las casillas de los contactos (mantenidos en una Cadena []) y puedo devolver los valores bien. Debido a que algunas personas tienen un montón de contactos, quería crear una barra de búsqueda como la de la guía telefónica de Android. Creé un EditText y lo alineé sobre mi lista. Encontré el código de filtrado aquí en StackOverflow y funciona de maravilla.
Mi problema
Cuando filtra el nombre de alguien y selecciona el nombre, cuando retrocede desde EditText o continúa escribiendo, la posición correcta del nombre que seleccionó no se guarda. Por ejemplo, si empiezo a escribir "Adam" y llego a "Ada" y lo selecciono, si retrocedo para escribir "Carol", se selecciona la posición en la que estaba "Ada". Reúne el lugar en el que estaba "Adam" desde el clic (Digamos 2) y cuando se restaura la lista, verifica esa posición (2) a pesar de que Adam ya no está allí. Necesito una forma de reunir el nombre ... luego, cuando la lista se restaura o se vuelve a buscar, se marca el NOMBRE Adam y no la POSICIÓN en la que estaba Adam anteriormente. No tengo absolutamente ninguna idea aparte de crear toneladas de matrices y realmente podría necesitar algo de ayuda. A continuación se muestra parte del código que estoy usando:
@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);
}
};