【问题标题】:android listview - update existing values single row at a timeandroid listview - 一次更新现有值单行
【发布时间】:2014-10-11 00:41:07
【问题描述】:
感谢大家努力提供帮助。这是我的困惑。
我有一个列表视图,
我从文件中将数据加载到其中(3 列 textview)。
每列指向文件系统上的一个位置
用户单击按钮开始,
应用程序读取列表框的第一行,更新一列说明它正在工作,然后上网,连接到服务器,做一些可能需要几秒钟到一分钟的工作......然后回来告诉列表视图完成。
此时列表视图会更新它在开始之前更新的列,并放置一些已完成的文本。
然后它移动到下一行并做同样的事情。
在某些时候,它可能有更多当前可见的项目。在这种情况下,它应该加载列表视图中存在但未加载/可见的下一个项目,并执行上述所有任务,然后滚动到下一个不可见项目。
它应该执行所有这些操作,直到最初加载到数组列表中的所有项目都没有完成。
我需要一些帮助来解决这个问题....希望它有意义
我的问题是如何在自动 fashin 中执行此操作,以便列表视图一次更新一个项目..每一行本身就是一个完整的过程...想不出办法..如果我使用 Async任务,那么我的知识有限,不了解如何使用 asyntask 在循环中更新列表视图中的每一行......我希望这一切都有意义
谢谢
【问题讨论】:
标签:
android
listview
android-listview
【解决方案1】:
在我看来,你有一个糟糕的 android 设计方法。首先,从活动中启动异步任务不是一个好主意。如果发生配置更改并且您的活动在异步任务完成更新任何行时被销毁,则不会通知活动 UI,因为不会更新行更新按钮。
我会做什么:
创建一个名为“loader”的类(例如)并将您的异步任务移到那里。在你的应用程序类上实例化这个类是个好主意,这样你就可以在你的代码中将它作为一个单例共享 (getApplication().getLoader())。
在加载器上创建一个注册注销接口回调,以便在行完成更新时通知任何侦听器。 rowUpdateFinished 回调方法应返回更新行的 id 以及您希望通知侦听器的任务完成所需的任何其他信息。此外,创建一个侦听器接口,例如 RowUpdateFinishedListenerI 。
在您的活动中,在 onCreate() 期间获取对加载器类的引用,然后在 onResume() 期间注册到加载器,并且不要忘记在 onPause() 期间从加载器中注销。 Activity 必须实现 RowUpdateFinishedListenerI。
将 onClickListener 设置为开始加载按钮,以便在按下时执行 loader.startLoading()。
在异步任务的加载程序发布执行方法中(任务完成时)通知侦听器:调用 rowUpdatedFinished(int rowPosition)
将监听此事件的活动将接收更新信号,然后采取相应措施:在列表视图项中激活任务完成按钮(有一种常用的方法来更新单行位置 id,谷歌它)然后使列表视图滚动到下一个位置(通知行 + 1)。