Очистить выбор SingleChoice ListView

Есть ли способ очистить выбранный элемент в ListView?

ListView определяется следующим образом:

<ListView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minHeight="50dp"
    android:id="@+id/example_list"
    android:layout_weight="2"
    android:choiceMode="singleChoice"/>

И заполняется с помощью пользовательского адаптера.

Выбранный элемент подсвечивается с помощью селектора:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" >
    <shape>
      <gradient
       android:startColor="#3E5260"
         android:endColor="#3E5260"
         android:angle="270" />
    </shape>
  </item>
  <item android:state_activated="true">
    <shape>
      <gradient
       android:startColor="#3E5260"
         android:endColor="#3E5260"
         android:angle="270" />
    </shape>
  </item>
</selector>

Теперь у меня действительно есть 2 ListViews в одном действии и когда элемент
выбранный в одном ListView Я хочу отменить выбор элемента в другом ListView.

Оба элемента ListViews поднимают следующий обработчик при щелчке элемента:

void DeviceList_Click(object sender, EventArgs e)
{
    //easy enough to check which ListView raised the event
    //but then I need to deselect the selected item in the other listview
}

Я пробовал такие вещи, как:

exampleList.SetItemChecked(exampleList.SelectedItemPosition, false);

и

exampleList.SetSelection(-1);

Но это не работает.

Ответ 1

Использование listView.SetItemChecked(-1, true); отлично работает здесь.

Вот моя деятельность, которую я тестировал:

SetContentView(Resource.Layout.Main);
var listView = FindViewById<ListView>(Resource.Id.listView);
_listAdapter = new CustomListAdapter(this);
listView.Adapter = _listAdapter;

var button = FindViewById<Button>(Resource.Id.removeChoice);
button.Click += (sender, args) => listView.SetItemChecked(-1, true);

Main.axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    >
  <ListView
    android:id="@+id/listView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
  />
  <Button
    android:id="@+id/removeChoice"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="remove choice"
    />
</LinearLayout>

Ответ 2

Используйте clearChoices(), чтобы очистить проверенное состояние всех элементов в ListView

Ответ 3

Его работы просты для меня:

ListView listView = (ListView) findViewById(R.id.idMyListView);
         listView.clearFocus();

Ответ 4

Это старый вопрос, но на всякий случай кому-то это понадобится в будущем, на основе ответа @Cheesebaron, вот что я сделал:

В каждом ListViews OnItemClickListener установите для другого списка отмеченный элемент значение false:

list1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
            list2.setItemChecked(list2.getSelectedItemPosition(), false);
        }
});

Эта реализация выполняется на Java, но если вы получите логику здесь, вы можете реализовать ее и на С#. Надеюсь, это поможет.