【问题标题】:Android how to update a listview periodicallyAndroid如何定期更新列表视图
【发布时间】:2013-04-20 11:43:13
【问题描述】:

我有一个在我的列表视图中使用的数组适配器。通过从服务器获取或删除内容来定期更新适配器。我使用了一个调度的threadpoolexecutor来定期更新适配器,然后使用adapter.notifydatasetchange();

列表视图会刷新并删除任何项目等,但例如,如果当我在 android 上滚动列表视图并接近列表视图末尾时从列表中删除了两个项目,则应用程序崩溃。我猜列表视图中的某些内容没有更新,并且列表的大小是初始大小。

你有什么要推荐的吗?

问候, 阿里斯

大家好,

我实际上找到了解决问题的方法,但忘记在此处查看是否有任何回复。 谢谢大家的建议。 基本上调度的threadpoolexecutor调用了一个runnable(我们称之为updateRunnable)来进行更新。 我所做的是以下内容: 在 updateRunnable 中,当它获取新数据并将它们存储在数组适配器中时,它然后使用 runOnUiThread 调用另一个可运行对象(我们称之为 updateListView),并在 updateListView 中设置列​​表视图的适配器。 这解决了我的问题

【问题讨论】:

  • 适配器可能有问题。确保在适配器中覆盖 getCount 以返回更新后的数据集大小

标签: android listview scheduled-tasks updating


【解决方案1】:

如果您的数据完全类似于数据库,我假设您使用 ListView,那么您需要将后台服务重构为使用 ContentProviderSyncAdapter 的模型以留在与服务器同步,然后通过与CursorAdapter 绑定来自动通知ListView,CursorAdapter 使用其实现ContentObserver 在底层数据库更改时自动更新列表。

Why does ContentResolver.requestSync not trigger a sync? 告诉你如何设置 ContentProvider。

How to handle REST calls, data persistence, syncing and observing ContentProvider 向您详细介绍了在ContentProvider 同步后列表更新通知的操作方式。

要设置很多基础设施工作,但是一旦你完成了,SyncAdapter 模型就会自动完成很多工作。

【讨论】:

  • 我想知道你是否可以帮助我解决这个问题goo.gl/d5opg5。我保证,这不是那些“为我解决这个问题”的问题之一。
【解决方案2】:

我曾经遇到过类似的问题。由于 ListView 不断更新,您可以

1) 就像活动在 OnCreate 中开始一样显示 Listview,并且

2) 调用此 SAME 活动,以便在列表视图中显示刷新的数据。

但是在再次调用相同的活动之后,首先立即完成()当前实例,因为您可以一个接一个地获取它的多个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多