【问题标题】:how to periodically remove items from ListView?如何定期从 ListView 中删除项目?
【发布时间】:2014-10-29 17:47:43
【问题描述】:
我有一个带有列表视图的活动。
每件商品都有有效期。
当该日期过去时,我希望该项目从 UI 中消失。
你建议我如何开发它?
我想过:
1) 警报管理器 - 但即使只删除一项,遍历整个列表 (20+) 是否有效?
2) 另外 - 我将如何强制刷新列表?无效数据 - 将导致整个列表重绘,我只想删除一项
3) 可能是后期延迟。但是后来我知道如何“发送”它以在 X mili 中触发,而不是在特定日期(转换更麻烦,没什么大不了的)
你有什么建议?
【问题讨论】:
标签:
java
android
listview
layout
android-listview
【解决方案1】:
1)警报管理器-但是检查整个列表是否有效
(20+) 即使只删除一项?
2) 另外 - 我将如何强制刷新列表?使数据无效
- 将导致整个列表重绘,我只想删除一项
3) 可能是后期延迟。但后来我知道如何“发送”它
在 X mili 中触发,而不是在特定日期触发(更麻烦的是
转换,没什么大不了的)
当您使列表无效时,这并不意味着您的列表将被完全绘制,这意味着仅会绘制可见项目 7-8 取决于列表项目的大小。
我对您的问题的解决方案:
当您的活动在onRseume 中创建或更好时,请检查日期并更新您的列表。当您的活动未显示时,您为什么要尝试查看日期? 如果您没有任何活动,则您没有任何 UI。
【解决方案2】:
您可以为列表中的项目指定一个 ID。这样,当列表更新时,他们的视图将不会被重新创建,而只会移动到他们的新位置。为此,您只需覆盖
public int getPositionForView (View view)
并为已移除的项目返回 AdapterView.INVALID_POSITION
AlarmManager 听起来不像是正确的工具,但您可以启动一个新线程,该线程会休眠一段时间,然后更改您的数据,该数据通过观察者/可观察接口通知您的适配器。但是不要忘记调用 Activity.runOnUiThread() 否则你会收到一个异常