取消选择 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,我认为这实际上是为您的行着色,但不是ListView
的choiceMode
。请查看this另一个答案了解更多详情。
【讨论】:
以上是关于取消选择 ListView 中的选定项目的主要内容,如果未能解决你的问题,请参考以下文章
需要根据 Listview 中的选择更改全景项目中的选定索引吗? [复制]
Flutter Horizontal ListView - 如何“跳转”选定的索引
使用按钮删除 Listview w/ArrayAdapter 中的选定项目