1

目前我正在编写android应用程序,其主要功能只是在屏幕上进行手指绘画。主要问题是如何存储应用程序的数据模型。最佳做法是什么?当前数据模型如下所示:

public class BoardModel {
public Bitmap mBoard;

public int mLineWidth = 1;
public int mForegroundColor = Color.GREEN;
public int mBackgroundColor = Color.BLACK;
}

该类在调用主活动的onCreate方法时被实例化。在它的生命周期中,活动可以被破坏。例如,当用户将设备方向从纵向更改为横向时,就会发生这种情况。因此,为了存储我的模型,我将像这样覆盖onSaveInstanceState

protected void onSaveInstanceState(Bundle outState) {
    outState.putParcelable(KEY_MODEL, mModel);
}

并像这样修改onCreate方法:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState == null) {
        mModel = new BoardModelParcelable();
    } else {
        mModel = savedInstanceState.getParcelable(KEY_MODEL);
    }       
}

我还添加了以下类来实现Parcelable接口

public class BoardModelParcelable extends BoardModel implements Parcelable{
....
}

问题是当我将任何数据添加到我的模型时,我必须修改BoardModelParcelable来存储它。例如,我打算添加描述仪器的类,用于绘制一些东西。在这种情况下,我需要为仪器创建另一个类,实现Parcelable接口?或者我应该在BoardModelParcelable中存储仪器数据?看起来我必须实现太多可打包的对象。任何想法如何存储我的模型数据而无需创建这么多的保存代码?

4

1 回答 1

1

您可以在没有 UI 的情况下使用 Fragment 在活动重新创建之间保留数据。您必须调用setRetainInstance(true)以告诉框架在配置更改期间保留此片段。因此,在配置更改后将重新创建活动,但此片段将与您的所有数据保持在以前的状态。关于这个主题的非常好的文章:http ://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

“自从在 Android 3.0 中引入 Fragments 以来,在 Activity 实例中保留活动对象的推荐方法是在保留的“worker”Fragment 中包装和管理它们。默认情况下,Fragment 与它们的父 Activity 一起被销毁和重新创建发生配置更改。调用 Fragment#setRetainInstance(true) 允许我们绕过这个销毁和重新创建循环,通知系统在重新创建活动时保留片段的当前实例。

于 2013-05-24T12:42:29.980 回答