java - Android ListView 项目上的滑动手势

标签 java android android-listview android-cursoradapter android-loader

我有一个由 ResourceCursorAdapter 填充的 ListView。我用loaders查询 ContentProvider 中列表项的机制。我检测列表项上的滑动手势以对其执行一些操作。新项目由后台服务添加,因此列表可以动态更改。

一切正常,除了当我开始刷卡并且发生数据库更改时(由于后台服务添加新行)。在这种情况下,无法正确检测手势。我注意到 ACTION_CANCEL 被分派(dispatch)到列表项 View ,并且对所有可见项执行 bindView 。在 bindView 方法中,我只设置了一些文本 - 我不更改那里的任何监听器。

即使后台服务正在添加新项目,如何才能使手势正常工作?也许有一种方法可以防止 Action 被取消,或者我可以暂停数据库更新,这样它们就不会中断手势。

最佳答案

您需要解耦数据和 UI 的更新。这会有点难看。

1)不要使用光标适配器。将游标的结果加载到某个数据结构中,并使适配器使用该数据的副本。然后,当您获取新数据时,创建该数据结构的新副本,然后将其保存到适配器查看的变量并调用notifyDataSetChanged。这样,更改光标和更新屏幕就不会关联起来。

2)当服务更新光标时,不会自动更新listview。然后子类化ListView。当您从服务获取更新时,保存新数据但不更新 ListView 。相反,设置一个标志。在新的 ListView 子类中,重写 onTouchEvent,以便当 ACTION_UP 事件发生时,您还可以检查该标志。如果设置了该标志,请将其设置为 false,然后在适配器上通知 DataSetChanged。这样,列表直到用户完成滚动后才会更新。

关于java - Android ListView 项目上的滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446273/

相关文章:

java - 从集合中的随机值获取优雅的数据集

java - JdbcTemplate 多结果集

java - 从 ListView 中删除项目时出错

java - 代码中有很多 else if 语句

android - FirebaseUI-Android Auth UI - 如何使用 AuthUI.getInstance().createSignInIntentBuilder() 设置自定义背景图片

android - 从 Android 中的数组中获取随机字符串并将其放置在 TextView 中

android - 需要获取 id 而不是 position

android - 无法在 ListView 中显示数据库

c# - 在 Android 手机的 REST 服务中找不到端点

java - 更新 Viewpager 中的 ListView