自定义源的首选项活动存储/加载值

时间:2013-07-30 14:56:56

标签: android storage preferenceactivity

我正在构建一个应用程序,允许用户定义特定类型的多个对象,让我们称之为“人”。 “Person”对象定义如下:

class Person {
  public String name;
  public int age;
}

这些“人”对象将被序列化并存储在应用程序中,可以是SharedPreferences,也可以是云存储机制。这可以被视为处理和工作。

我的问题是我需要一个编辑器界面,允许用户更改其集合中任何特定“Person”实例的“name”和“age”。为了让我的UI感觉尽可能像股票一样,我希望我的编辑器界面类似于Android实现的“Preference”界面。因此,我需要一种方法来加载“PreferenceActivity”并将其偏好保存到POJO中。

我希望这样做的原因是我有一个用户习惯使用的UI。我的另一个选择是模仿风格并自己创建所有处理代码,这将花费大量时间。

我想象过程将覆盖“PreferenceActivity”的“加载”和“保存”功能,以通过“意图”从“onCreate”提供的POJO中提取/推送值 - 并将此POJO返回为调用者的活动结果。

这可以实现吗?

1 个答案:

答案 0 :(得分:0)

这样做的目的是什么?我不明白为什么这对于包含数据的pojo的参考是否有用以及它是如何可行的。如果可能的话,保存对象很可能是一个通用的键 - 对象映射,您需要从中提取数据,这正是首选项已经工作的方式。

如果这一点只是为了让Person对象中的信息,为什么不只是创建一个基于保存的首选项创建一个的方法。

-----加法

如果在App中添加一个静态/单一数据处理程序(存储库),它将在App执行时包含所有人员,并且每个人都有某种标识符。然后,您可以将意图中的ID传递给PreferenceActivity,PreferenceActivity将从数据处理程序中获取person对象,并根据它填充PreferenceActivity的值。

将另一个Preference添加到名为“Save”或类似的PreferenceActivity,您可以在活动中解析并绑定它。单击此按钮将获取当前输入的信息(将保存在SharedPreferences中)并从中创建一个Person实例。然后它应该将此对象传递给数据处理程序,该数据处理程序将添加它(或者如果ID已存在则将其更新)到Persiners的存储库。此时您应该考虑序列化整个存储库并保存它,一种简单的方法就是将JSON全部放入SharedPreferences中。不要忘记,您第一次访问数据处理程序时需要加载此数据,以便可以访问以前保存的人员。

我还建议你为数据处理操作创建接口,以防你想要添加新的或替换实现来代替数据库操作。

通过这种方式,您可以使用PreferenceActivity添加/编辑人员。即使我更喜欢为它创建自己的UI。