【发布时间】: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