【问题标题】:Using multiple static ArrayLists through a whole Android application在整个 Android 应用程序中使用多个静态 ArrayList
【发布时间】:2012-08-23 19:39:02
【问题描述】:

我正在开发我的第一个 android 应用程序,希望在这里得到一些提示。

我从一个 URL 中得到一个 JSONObject,然后将其解析为 ArrayList<MyObject>。该列表将在多个选项卡中使用,并根据选项卡的需要进行过滤。用户可以修改这些列表中的对象,并且更改应与列表同步。

因此,为了加快加载时间,我创建了一个类 DataHolder 作为一个包含 7 个数组列表的单例,基于不同排序顺序和过滤条件的 JSONObject。这些列表中的对象是来自原始列表的引用。填充列表工作正常。

列表将用于不同的片段和活动。

现在的问题是:第二个活动包含带有片段的选项卡。初始化片段后...DataHolder 中的所有数组列表计数为 0!我必须将JSONObject 保存在SharedPreferences 中并再次填充它以获得List。我无法再次加载 url,因为它会使应用程序减慢很多,并且使用 SharedPreferences 不是一个选项(我认为)因为需要同步 Lists。我读过使用静态变量不是最佳解决方案,但它似乎是最简单的方法:(

我可以做些什么来解决这个问题?我应该使用Parcelable Objects 并始终传递Lists 吗?或者也许使用SQLite?还是有其他方法?

【问题讨论】:

  • 不清楚你是怎么做到的——你的DataHolder是一个POJO还是你扩展了Activity或者它是第一个Activity的一个内部静态类?如果它是后两个中的任何一个,那么这绝对不是你应该做的。 Activity 不应该暴露 Activity 的静态方法或成员变量或内部类。
  • 创建一个Application 类并将您的数据放入实例中(您可以在onCreate() 中分配实例)developer.android.com/reference/android/app/Application.html 它也需要在清单中声明
  • 我的 DataHolder 是 POJO。我已经测试了扩展应用程序并获得了相同的结果。使用 Fragments 后,列表为 0 :(.

标签: android sqlite arraylist sharedpreferences parcelable


【解决方案1】:

SQLite 方法绝对是正确的方法,恕我直言。

您应该使用内部数据库来存储此类列表: http://developer.android.com/guide/topics/data/data-storage.html#db

【讨论】:

  • 我现在考虑的两个主要选项是使用 sqllite 或 sharedprefs 来保存列表。如果用户进行了更改,我需要同步更新我的所有列表视图。使用 sqllite 可能更干净。我会试试这个。谢谢!
【解决方案2】:

使用静态列表进行本地操作。当用户离开该屏幕(活动)时,将更改保存到数据库中。

【讨论】:

  • 如果Activity 仅用于“本地”,为什么还需要使用static 成员?
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2013-12-13
  • 2011-11-03
  • 2017-04-17
  • 2016-04-11
相关资源
最近更新 更多