Android如何定期更新列表视图

时间:2013-04-20 11:43:14

标签: android listview scheduled-tasks updating

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

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

你有什么值得推荐的吗?

此致 ARIS

大家好,

我实际上找到了解决问题的方法,忘了在这里查看任何回复。 谢谢大家的建议。 基本上为scheduledthreadpoolexecutor调用runnable(让我们称之为updateRunnable)来进行更新。 我做的是以下内容: 在updateRunnable中,当它获取新数据并将它们存储在数组适配器中时,它会使用runOnUiThread调用另一个runnable(让我们称之为updateListView),并在updateListView中设置listview的适配器。 这解决了我的问题

2 个答案:

答案 0 :(得分:1)

如果您的数据与数据库类似,我假设您使用了ListView,那么您需要将后台服务重构为使用ContentProvider和{{1}的模型与服务器保持同步,然后通过绑定SyncAdapter自动通知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模型非常自动化。

答案 1 :(得分:0)

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

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

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

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