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);

        }

    };

Respuestas a la pregunta(2)

Su respuesta a la pregunta