【问题标题】:Update dynamically an object in a gridview updating its attributes from an IntentService动态更新网格视图中的对象,从 IntentService 更新其属性
【发布时间】:2013-09-13 10:07:47
【问题描述】:

我有一个 GridView,其中每个项目都显示有关对象的信息。接下来,我有一个带有一些可运行任务的 IntentService。最后,还有一个从 BaseAdapter 扩展而来的自定义适配器,其中包含项目的 ArrayList。 IntentService 和 Gridview 之间的通信通过适配器中的 BroadcastReciver 进行,该适配器接收一个名为 Thumb 的特殊对象,该对象是一个 Parcelable 对象,作为 Intent 的额外出现。

到目前为止,一切都很典型。

现在,当一个任务在其可运行对象内的服务中启动时,我发送一个空的 Thumb(作为意图)。因此 GridView 向用户显示一个项目,该项目代表此时正在执行的任务,当任务完成时,该项目将使用新信息刷新。

这是我的问题:如何动态刷新 GridView 中对象的信息?

方法 1

我的第一个想法(我认为性能上最昂贵的)是:当 Intent 带有一个空的 Thumb 时,我会将其添加到 ArrayList 并通知适配器。然后当第二个意图带有“完整”拇指时,我将在 ArrayList 中搜索它并用另一个替换它。

  • (+) 易于实施。
  • (-) 性能不佳。我必须在 ArrayList 中搜索一个项目,检查它是否是同一个对象,然后替换它。

方法2

如果“Empty Thumb”和“Full Thumb”相同(因为在Task中只有一个正在更新的Thumb对象),引用(内存地址)必须相同。所以只需要第一次将空Thumb添加到GridView,然后当Full Thumb进入intent时,我会通知适配器刷新它(因为ArrayList已经有Thumb(参考))

  • (+) 性能很好,因为我不需要对 ArrayList 进行操作
  • (-) 不起作用。 (是的,一个很大的障碍)。所以我已经看到,如果我比较“Empty Thumb”和“Full Thumb”之间的引用(==)是不同的。我认为这是因为 Thumb 是一个 Parcelable 对象,它在不同线程中的可运行任务中执行,当在内部使用 BroadcastReciver 时,它会创建一个新对象或克隆 Thumb。所以对象不同。它是一种在线程之间传递对象的“可序列化”机制。

关于我应该如何关注这个问题的任何建议?

【问题讨论】:

  • 我认为性能上最昂贵的 - 你实际测试过这个还是严格来说是一个意见(在这种情况下你应该测试它)?你的Thumb 类是否有一些东西可以用来从其他拇指对象中唯一地识别一个对象?
  • 我没有测试,因为第一种方法执行的操作更多(并且比第二种方法更昂贵[作为列表中的搜索])。我想生成一个像 UUID 或类似的 ID,但最后我不需要它。下来我解释一下我是怎么做到的。

标签: android android-intent android-service android-gridview


【解决方案1】:

方法 3

最后我使用了一个中间解决方案(经常发生)。

“空拇指”在 GridView 中具有所有相同的视图。

因此,当它向 ArraList 添加一个 Empty Thumb 时,它也会添加到其他列表中,从而保持 Empty Thumb 在 ArrayList 中的位置。

接下来,当“Full Thumbs”到达时,我得到这个新职位列表的第一个位置,然后我在 ArrayList 中用这个位置的 Full Thumb 替换 Empty Thumb,最后我从职位列表中删除这个位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2015-02-18
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多