android listview - 一次更新单行的现有值

时间:2014-10-11 00:41:08

标签: android listview android-listview

感谢所有人努力帮助......这就是我的困惑。 我有一个列表视图, 我从一个文件中加载数据(3列textview)。 每列指向文件系统上的一个位置 用户点击按钮开始, 应用程序读取列表框的第一行,更新列表明它正在工作,然后在互联网上运行,连接到服务器,做一些可能需要几秒钟到一分钟的工作......然后回来告诉列表视图完成。 此时列表视图更新它在开始之前更新的列,并将完成的一些文本放入其中。 然后它移动到下一行并执行相同的操作。 在某些时候,它可能有更多当前可见的项目。在这种情况下,它应该加载列表视图中存在但未加载/可见的下一个项目并执行上述所有任务,然后滚动到下一个不可见项目。 它应该完成所有这些,直到最初在数组列表中加载的所有项都没有完成。 我需要一些关于如何处理这个问题的帮助....希望它有一定道理 enter image description here

我的问题是如何在自动fashin中执行此操作,以便listview一次更新一个项目。每行本身就是一个完整的过程...想不出办法..如果我使用Async任务,然后我的知识是有限的,并没有理解如何使用asyntask更新循环中listview中的每一行...我希望这一切都有所作为

由于

1 个答案:

答案 0 :(得分:0)

在我看来,你有一个糟糕的Android设计方法。首先,从活动中启动异步任务不是一个好主意。如果在异步任务完成任何行更新时发生配置更改并且您的活动被销毁,则不会通知活动UI,因为行更新按钮不会更新。 我会做什么:

  1. 创建一个名为" loader"的类。 (例如)并在那里移动您的异步任务。最好在您的应用程序类上实例化此类,以便您可以在代码中将其作为单例共享(getApplication()。getLoader())。

  2. 在加载器上创建一个注册取消注册接口回调,以便在行完成更新时可以通知任何侦听器。 rowUpdateFinished回调方法应该返回更新的行的id以及您希望通知给侦听器的任务完成所需的任何其他信息。另外,为RowUpdateFinishedListenerI实例创建一个侦听器接口。

  3. 在你的活动中,在onCreate()期间获取对loader类的引用,然后在onResume()和DONT FORGET期间注册到加载器,以便在onPause()期间从加载器中注销。该活动必须实现RowUpdateFinishedListenerI。

  4. 将onClickListener设置为开始加载按钮,以便在按下时执行loader.startLoading()。

  5. 在您的加载器中,从异步任务执行方法执行方法(当任务完成时)通知侦听器:调用rowUpdatedFinished(int rowPosition)

  6. 您正在侦听此事件的活动将收到更新信号,然后相应地采取相应措施:在列表视图项中激活您的任务完成按钮(有一种常用的方法来更新单行位置ID,谷歌它)然后使列表视图滚动到下一个位置(通知行+ 1)。