1

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

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

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

如果 Fragment A 也允许配置文件编辑呢?当用户确认他们的更改时,我是否应该让其 HostActivity 知道更新活动中持有的主要配置文件?

还是等到调用 FragmentA.onPause 会更好?我想我可以等到某些东西强制片段调用 onPause,此时我可以保存片段的状态以及来自主机活动的配置文件活动。

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

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

4

2 回答 2

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");  
}
于 2013-10-04T21:47:27.880 回答
0

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

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

于 2013-10-04T21:47:01.343 回答