我应该保存来自主机活动或其片段的持久数据吗?

时间:2013-10-04 21:37:32

标签: android android-fragments android-activity persistent-storage

这更像是一个结构/设计哲学问题。

我有主要的主机活动,目前正在保存并加载配置文件以供用户查看。 配置文件的凭据显示在片段A(用户名,生日等)中。这是通过在使用片段事务显示它之前将配置文件作为参数传递给片段来完成的。

如果用户离开或旋转屏幕,我该如何保存该配置文件数据?我应该从片段A或其HostActivity中的onPause进行保存吗?

如果片段A还允许配置文件编辑怎么办?当用户确认他们的更改时,我是否应该让其HostActivity知道更新活动中的主要配置文件?

或者等到调用FragmentA.onPause会更好吗?我想我可以等到某个东西迫使片段调用onPause,此时我可以保存片段的状态以及来自主机活动的配置文件活动。

令我困惑的主要问题是:我是否需要管理两个Profile对象? HostActivity及其FragmentA都使用它。在保存,加载和编辑之间来回运行会让人感到有些困惑。我不能只从一个班级处理所有这些吗?

好的,我有两个非常好的和可行的答案。哪一个更适合我的目的呢?我应该使用sqlLite数据库还是全局Java单例来处理我的个人资料?每个会话只能激活一个配置文件。还必须考虑保存,加载和编辑配置文件。

2 个答案:

答案 0 :(得分:0)

为什么不使用sqlite数据库存储用户配置文件数据?每当您需要访问用户配置文件数据时,您只需查询它即可。

您可以在onPause方法中保存所有相关数据。使用数据库将确保数据持久性,抵制任何片段/活动重新创建!

答案 1 :(得分:0)

如果一个会话中每个用户只能有一个配置文件(如上所述),为什么不使用Java singleton class

 private ProfileOject() {
    // Exists only to defeat instantiation.
}

public static ProfileObject getInstance() {
    if(instance == null) {
        instance = new ProfilerObject();
    }
    return instance;
}

现在正常使用getter和setter。

在每项活动中,您都可以获得Profile,如下所示:

profile = ProfileObject.getInstance();

这意味着,如果您在Fragment A中进行更新,则在调用activity时,它会从profile object获取更新后的值。

关于onRotate/Pause/Resume使用savedInstanceState,请参阅以下示例:

//Use onSaveInstanceState(Bundle) and onRestoreInstanceState

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

  // Save UI state changes to the savedInstanceState.   
  // This bundle will be passed to onCreate if the process is  
  // killed and restarted.

  savedInstanceState.putBoolean("MyBoolean", true);  
  // etc.  
  super.onSaveInstanceState(savedInstanceState);  
}  
//onRestoreInstanceState  
    @Override  
public void onRestoreInstanceState(Bundle savedInstanceState) {  
  super.onRestoreInstanceState(savedInstanceState);  
  // Restore UI state from the savedInstanceState.  
  // This bundle has also been passed to onCreate.  
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");  
}