14

有没有办法清除 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 个 ListView,当
在一个 ListView 中选择一个项目时,我想取消选择另一个 ListView 中的项目。

单击项目时,两个 ListView 都会引发以下处理程序:

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

但这似乎不起作用。

4

5 回答 5

27

在这里使用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);

主要.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>
于 2013-03-02T01:45:29.213 回答
18

使用clearChoices()清除 ListView 中所有项目的选中状态

于 2013-02-26T04:38:15.423 回答
2

它对我来说很简单:

ListView listView = (ListView) findViewById(R.id.idMyListView);
         listView.clearFocus();
于 2013-06-04T19:56:33.357 回答
1

这是一个老问题,但以防万一其他人将来需要它,基于@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 实现的,但如果你在这里得到逻辑,你也可以用 C# 实现它。希望这可以帮助。

于 2015-07-31T08:50:27.823 回答
0

对于 CHOICE_MODE_SINGLE / singleChoice

int v = listView.getCheckedItemPosition();
if (v >= 0)
    listView.setItemChecked(v, false);
于 2018-09-26T09:46:31.170 回答