android - 如何在更改其(行项目的)选择器(选定项目的背景等)后恢复列表视图行项目的默认效果?
问题描述
我正在使用自定义ActionMode(不是AbsListView.MultiChoiceModeListener()附带的listview的默认ActionMode)在列表视图上实现多项选择。它只是更改每个行项的背景颜色,并且在 Adapter 类中有一个 SparseBooleanArray 来跟踪突出显示的行项(请注意,我没有调用 setselected() 或任何方法,我只是突出显示选定的节点并保持SparseBooleanArray 中突出显示的行的位置)。现在,我想要在取消选择行项目后更改回默认模式(波纹或以前的 Android 版本中的任何内容)。
另一件事,我没有在多选之前为列表行设置任何背景颜色,适配器只是将其以默认样式放入 listvew 中。
谢谢...
解决方案
您必须调用 notifyDataSetChanged(),但在此之前,您必须在 onBindViewHolder 中进行检查
onBindViewHolder(..params, positions){
if(isPositionSetInYourSparseBooleanArray){
//Your background for set ones
}else{
//Your background for unset ones
}
}
要全部取消设置,请清除稀疏布尔数组,因为它们都不会被设置,所有都将落入 else 并将您的背景应用于未设置的那些。notifyDataSetChanged()
取消设置 sparseArray 后不要忘记打电话
推荐阅读
- java - 到 mysql 服务器的 Java 连接字符串失败
- eclipse - 在 java 中从 Eclipse 执行 Apache Beam WordCount 示例时,参数不以“--”错误开头
- ruby-on-rails - Omniauth-facebook Rails 6:无效的应用程序 ID
- navigation - Next.js Fetch API 无法加载 webpack:///./pages/index.js?。对于 CORS 请求,URL 方案必须是“http”或“https”
- vue.js - 根据数据中的另一个数组过滤对象数组
- python - 当 pandas.Series 将 int64 转换为 NaN 时会发生什么?
- ios - 如果更改屏幕方向,如何修复按钮大小?
- ios - 关于在 Swift 中设置 datePicker 时间的问题
- google-apps-script - 您如何设置按日期触发的自动电子邮件警报
- java - Mongodb驱动正则表达式查找