我需要保存我在片段中使用的自定义对象,以便在屏幕旋转时不会丢失(当应用程序调用onDestroy然后调用onCreate时)
现在正常的方法是实现Parcelable接口并将其作为Parcelable对象保存到bundle中。
这是一种非常乏味的做事方式。
有没有办法像“putObject”方法一样传递对象?
答案 0 :(得分:3)
您可以将数据保存为片段,并在配置更改期间保留,例如example。
扩展Fragment类并声明对有状态的引用 对象。
public class RetainedFragment extends Fragment {
// data object we want to retain
private MyDataObject data;
// this method is only called once for this fragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain this fragment
setRetainInstance(true);
}
.. getter and setter
}
然后使用FragmentManager将片段添加到活动中。
public class MyActivity extends Activity {
private RetainedFragment dataFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
..
// find the retained fragment on activity restarts
FragmentManager fm = getFragmentManager();
dataFragment = (RetainedFragment) fm.findFragmentByTag(“data”);
// create the fragment and data the first time
if (dataFragment == null) {
// add the fragment
dataFragment = new DataFragment();
fm.beginTransaction().add(dataFragment, “data”).commit();
} else {
// available dataFragment.getData()
..
// save data in onDestroy dataFragment.setData(yourData);
答案 1 :(得分:1)
最好的方法是实施Parcelable(更快)。
更简单(不高效)的方法是实现Serializable并将对象添加到bundle中作为serializable。
答案 2 :(得分:-1)
1)创建一个扩展Application类的类,在其中添加一个对象的arrayList。 在onSaveInstanceState调用内:
getApplication().getObjectArray().add(YourObject);
使用putInt保存包内的Object索引。
在方法onReturnestoreInstanceState中提取它。
2)我最不喜欢的一个:
android会自动保存其视图的状态 因此,保存对象的方法是创建一个视图,将其可见性设置为none,这样它就不会在屏幕上显示,然后使用方法将我们想要的每个对象添加到视图中:
view.setTag(key,Object); or view.setTag(Object);
现在在onReturnestoreInstanceState里面获取视图并提取标签。
遗憾的是,我找不到更简单的保存对象的方法
希望这个可以帮助你(在我的应用程序中我最终使用第一种方法)