Android 如何删除ListView中的选中项

Android 如何删除ListView中的选中项,android,listview,button,checkbox,Android,Listview,Button,Checkbox,我希望有一个按钮,当单击该按钮时,将删除列表视图中的所有选中项。我已经设置了所有的xml项,只是不知道如何编写java代码。列表视图显示来自适配器的数据。要从视图中删除项目,需要从适配器中删除项目,并通知视图。在android中,适配器通过调用notifyDataSetChanged()通知视图 如何从适配器中删除项目取决于您的特定适配器。SimpleCursorAdapter从底层的光标获取数据。要删除项目,应将该项目从基础光标中删除。例如,使用SQLiteCursor需要删除数据库中的一行

我希望有一个
按钮
,当单击该按钮时,将删除
列表视图
中的所有选中项。我已经设置了所有的xml项,只是不知道如何编写java代码。

列表视图显示来自
适配器的数据。要从视图中删除项目,需要从
适配器中删除项目,并通知视图。在android中,
适配器通过调用
notifyDataSetChanged()
通知视图

如何从适配器中删除项目取决于您的特定适配器。
SimpleCursorAdapter
从底层的
光标
获取数据。要删除项目,应将该项目从基础
光标中删除。例如,使用
SQLiteCursor
需要删除数据库中的一行

如果使用
ArrayAdapter
只需在适配器上调用
remove(T object)
。它将自动为您调用
notifyDataSetChanged()

更新: 我在git hub上看到了代码。以下是一些如何让你的应用程序尽快运行的建议

尝试将代码重构为更小的可抓取部分。首先,为大型方法的某些部分提供可理解的名称

问题是,数据库中可能有数百行,而只有足够的视图来填充屏幕。在任何地方都不会重新记录检查的行,因此无法删除它们。您可能需要扩展BaseAdapter或
SimpleCursorAdapter
来保存行的状态(选中或未选中)。阅读优秀的安卓系统


我的观点是,视图、您的
复选框和包含要显示的数据的模型之间存在区别。所以,看看吧。您现在可以忽略控制器的概念。

列表视图显示来自
适配器的数据。要从视图中删除项目,需要从
适配器中删除项目,并通知视图。在android中,
适配器通过调用
notifyDataSetChanged()
通知视图

如何从适配器中删除项目取决于您的特定适配器。
SimpleCursorAdapter
从底层的
光标
获取数据。要删除项目,应将该项目从基础
光标中删除。例如,使用
SQLiteCursor
需要删除数据库中的一行

如果使用
ArrayAdapter
只需在适配器上调用
remove(T object)
。它将自动为您调用
notifyDataSetChanged()

更新: 我在git hub上看到了代码。以下是一些如何让你的应用程序尽快运行的建议

尝试将代码重构为更小的可抓取部分。首先,为大型方法的某些部分提供可理解的名称

问题是,数据库中可能有数百行,而只有足够的视图来填充屏幕。在任何地方都不会重新记录检查的行,因此无法删除它们。您可能需要扩展BaseAdapter或
SimpleCursorAdapter
来保存行的状态(选中或未选中)。阅读优秀的安卓系统


我的观点是,视图、您的
复选框和包含要显示的数据的模型之间存在区别。所以,看看吧。您现在可以忽略控制器的概念。

那么
SimpleCursorAdapter
呢?同样的事情?更新了答案。对于
SimpleCursorAdapter
搜索仍在继续-底层的
光标需要更新。我知道我们要去哪里,但我需要使用选中的
复选框删除所有项目。好的,我明白了。那么视图如何知道是否选中复选框呢?显然,这些信息存储在某个地方。请编辑这个问题,这样我们就可以看到如何迭代信息。我不知道如何检查它是否被检查。我可以试试
isChecked()
方法。使用
SimpleCursorAdapter
怎么样?同样的事情?更新了答案。对于
SimpleCursorAdapter
搜索仍在继续-底层的
光标需要更新。我知道我们要去哪里,但我需要使用选中的
复选框删除所有项目。好的,我明白了。那么视图如何知道是否选中复选框呢?显然,这些信息存储在某个地方。请编辑这个问题,这样我们就可以看到如何迭代信息。我不知道如何检查它是否被检查。我可以试试
isChecked()
方法。