2

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

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

你有什么要推荐的吗?

问候, 阿里斯

大家好,

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

4

2 回答 2

1

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

为什么 ContentResolver.requestSync 不触发同步?告诉你如何设置 ContentProvider。

如何处理 REST 调用、数据持久性、同步和观察 ContentProvider会告诉您更多关于列表更新通知在ContentProvider同步后如何操作的信息。

建立起来需要大量的基础设施工作,但是一旦你完成了,模型中就会有很多非常自动化的东西SyncAdapter

于 2013-04-20T12:03:48.127 回答
0

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

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

2)调用这个相同的活动,以便在列表视图中显示刷新的数据。

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

于 2013-04-20T13:58:12.710 回答