目前我正在编写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 中执行存储仪器数据?看起来我必须实现太多的parcelable对象。任何想法如何存储我的模型数据而不创建这么多的保存代码?
答案 0 :(得分:1)
您可以使用不带UI的Fragment在活动重新创建之间保留数据。您必须调用setRetainInstance(true)
告诉框架在配置更改期间保留此片段。因此,在配置更改后,将重新创建活动,但此片段将保留所有数据的先前状态。关于这个主题的非常好的文章:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
“自从Android 3.0中引入Fragments以来,在Activity实例中保留活动对象的推荐方法是在保留的”worker“Fragment中包装和管理它们。默认情况下,Fragments会被破坏并重新创建parent发生配置更改时的活动。调用Fragment #setRetainInstance(true)允许我们绕过这个destroy-and-recreate循环,通知系统在重新创建活动时保留片段的当前实例。“