取消选择 ListView 中的选定项目

Posted

技术标签:

【中文标题】取消选择 ListView 中的选定项目【英文标题】:Deselect selected item in ListView 【发布时间】:2013-07-19 00:52:46 【问题描述】:

我在布局中使用ListView,如下所示:

 <ListView android:id="@+id/list"
              android:layout_
              android:layout_gravity="center"
              android:layout_
              android:layout_weight="0.7"
              android:layout_marginTop="5dp"
              android:orientation="vertical"
              android:layout_centerInParent="true"
              android:divider="@color/dark_grey"
              android:drawSelectorOnTop="false"
              android:focusable="true"
              android:layout_marginBottom="55dp"
              android:cacheColorHint="#00000000"
              android:listSelector="@color/light_grey"
              android:dividerHeight="1px" />

选择器很好用,但我怎样才能禁用选择器?

我试过了:

listView.clearChoices();
listView.setSelected();
listView.setSelector();
...

还有一些其他的东西,但没有任何效果。有什么想法可以让我选择的项目恢复正常吗?不会这么复杂吧?

编辑:我需要一个编程解决方案!

谢谢!

【问题讨论】:

愿你正遭受这个错误***.com/questions/9754170/… 是的,当在clearChoices() 之后调用requestLayout() 时,它可以工作。如果您发布答案,我会接受它 【参考方案1】:

clearChoices() 之后拨打ListView 上的requestLayout()。它会起作用的。

【讨论】:

对我来说,它在 clearChoices() 之后与 adapter.notifyDataSetChanged() 一起工作 对我来说,在 adapterObject.notifyDataSetChanged () 之后使用 listviewObject.clearChoices () adapter.notifyDataSetInvalidated() 适用于 ExpandableListView 让我们热一下这个话题。我试图在 ActionMode.Callback 的 onDestroyActionMode 方法中使用它并且不起作用。唯一可见的变化发生在调用 listView.setAdapter(myAdapter);但它意外地将屏幕重新定位到顶部。【参考方案2】:

正如上面提到的@Muerte,执行以下操作对我有用:

myListView.clearChoices();
myAdapter.notifyDataSetChanged();

这似乎比重新绘制整个布局要好。

【讨论】:

对我来说,在 adapterObject.notifyDataSetChanged () 之后使用 listviewObject.clearChoices ()【参考方案3】:

对我来说,它适用于:

listView.setAdapter(myAdapter);

【讨论】:

谢谢。在尝试了这么多不同的方式之后,这终于对我有用了。 这对我有用。所有其他建议均无效。我不确定他们为什么不这样做,但可能是因为我在 onItemClick() 处理程序中调用了 myAdapter.notifyDataSetChanged()。 此解决方案的缺点是列表将重新创建,将屏幕定位到顶部。有时可能很烦人。【参考方案4】:

在您声明 ListView 使用的 XML 中:

<ListView android:id="@+id/my_list" android:listSelector="#00000000" />

【讨论】:

是的,但我希望我的选择器在下次单击列表项时再次工作......如果我这样做,那么选择器是不可见的,对吧? 哦,也许this 可以帮忙..【参考方案5】:

点击后可以设置选择器:

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/transparent_white" android:state_focused="true" android:state_pressed="true"/>
<item android:drawable="@drawable/transparent_white" android:state_focused="false" android:state_pressed="true"/>
<item android:drawable="@drawable/transparent_white" android:state_focused="true"/>
<item android:drawable="@drawable/transparent_white" android:state_focused="false"/>

@drawable/transparent_white 是 #00ffffff

【讨论】:

【参考方案6】:

试试这个

像这样创建自己的选择器 xml 文件

YourSelector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>

查看此链接

here

【讨论】:

【参考方案7】:

没有任何解决方案实际上对我有用。我的列表视图用于列出搜索的项目,并提供重做搜索的规定。在得到结果后,我添加了以下代码 sn-p 并且它起作用了:)

myAdapter.setSelectedIndex(-1);

【讨论】:

您的 myAdapter 是什么类型的?对于 ListView 和 ArrayAdapter,我都找不到这个方法。【参考方案8】:

您的选择器资源在这里似乎是错误的。您应该使用具有透明背景的drawable,我认为这实际上是为您的行着色,但不是ListViewchoiceMode。请查看this另一个答案了解更多详情。

【讨论】:

以上是关于取消选择 ListView 中的选定项目的主要内容,如果未能解决你的问题,请参考以下文章

需要根据 Listview 中的选择更改全景项目中的选定索引吗? [复制]

取消选择 ListView 中的项目

Flutter Horizo​​ntal ListView - 如何“跳转”选定的索引

使用按钮删除 Listview w/ArrayAdapter 中的选定项目

自定义ListView的RelativeLayout中的Android布局居中

获取 ListItem ContextMenu 中的选定项目