Очистить выбор 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, но если вы получите логику здесь, вы можете реализовать ее и на С#. Надеюсь, это поможет.