【问题标题】:How to store and pass information between list views如何在列表视图之间存储和传递信息
【发布时间】:2013-01-21 03:39:44
【问题描述】:

我的应用程序的功能可以仿照wanelo 之类的东西。

用户将在一个活动中输入他们想要购买的搜索词。他们将获得与该搜索词匹配的项目列表。因此,ListView 将包含Items。 Item 有很多属性,主要有:

  • id - 对应于数据库中 Item 的 id
  • date_modified - 知道Item 是否更新的时间戳
  • remote_directory - Item 的资产(如图标和其他图像)的基本目录的 URL。 URL 的格式如下:http://my.domain.com/items/a1bc234d/ 其中a1bc234d 是随机生成的,由date_modified 播种。
  • remote_dir_name - remote_directory 的子字符串。在上面的例子中,这个值是a1bc234d

从搜索结果列表中,用户可以标记要稍后查看的项目。这将触发几件事:

  • 首先,我想将Item 广告到另一个ListView,代表用户“下载”的Items。
  • 然后,我想实际下载Item 的所有数据:描述,remote_directory 中的所有资产。这些东西被存储在我应用程序的内部存储文件夹中remote_dir_name:/data/data/my.app.package.name/files/a1bc234d/

这些“下载”的项目旨在离线模式下查看。

此“已下载”ListView 对应于不同的 Activity,并且将具有显示Item 下载状态进度条的列表项。此外,这个ListView 应该是可编辑的:使用应该能够删除和重新排序列表中的Items。

最后,“下载的”ListView 需要持久化。它应该保持秩序。搜索结果的ListView 不需要保留。

我在弄清楚如何存储下载的Items 列表时遇到了很多麻烦。如果列表项正在下载,“下载”ListView 需要知道何时更新列表项的进度条。我认为将Items 存储在数据库中有点矫枉过正,因为我会不断更新一行的列,直到下载完成。我应该如何在这两个ListViews 之间传递这个下载状态信息?

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    我不完全确定我在这里掌握了全貌,但在我看来,您需要两个 ArrayList 字段。

    List<Item> downloadedItems = new ArrayList<Item>;
    List<Item> searchItems = new ArrayList<Item>;
    

    那么您需要做的是为 DownloadListView 创建您自己的自定义 ListAdapter,并创建您自己的自定义 download_item.xml,您将在 ListAdapter 内部进行扩展。在您的情况下,听起来这个 download_item.xml 将包含一个文本视图和一个进度条,并且需要包含(或顶层)布局集来包装内容。

    现在在 SearchListView 的点击监听器中设置它,以便它将调用一个函数,该函数将获取被点击的项目并将其添加到下载的项目 ArrayList 并开始下载,以及刷新 listadapter 数据集以便它知道更新列表中的项目。

    下载应该在 AsyncTask 中,您需要使用其中的 @Override publishProgress() 部分,以便更新下载栏的状态。

    请见谅或失误,我刚醒来。

    【讨论】:

    • 所以,我想我想知道 ArrayLists 应该驻留在哪里。我编辑了我的问题,包括 downloadItems listview 在一个 Activity 中,而 searchItems listview 在另一个 Activity 中。通常,用户会在开始下载项目活动之前进行搜索。下载的Items Activity 应该如何检索ArrayList?来自 searchItems 活动?这对我来说似乎有点奇怪......我想我想下载的项目应该存在于一个中心位置,而不是作为活动的一部分?让我知道我是否在这里搞错了!
    • 几件事。这里可以使用单例。或者您可以将列表反序列化为 json 字符串并将其传递,或者将数组写入存储并将其拉回,或者将其写入服务器 api 并将其取回。老实说,单身人士可能是最简单的。
    • 啊,有趣。我没想过要使用单例。所以,我想我想序列化列表以将其持久存储在这些事件中:在下载广告之后,在用户“保存”他们下载的项目编辑之后,对吗?
    • 我正在后台线程上进行下载。每个项目一个下载线程。您指定 AsyncTask 执行此操作的任何原因?
    • 最简单的管理方式,并且有一些很好的功能,比如 onpostexecute onpreexecute 和 publishprogress。它还会自动排队并在它们到来时完成它们。这只是我个人的喜好。我倾向于只在游戏中使用我自己的线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多