在Android中,可以随时销毁Activity和Fragment(例如,如果用户已离开Activity或已调用另一个Activity)。我在Fragment中有一些数据,我想保存它,但是找不到合适的方法。
例如,在Fragment中,我有这段代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (null != savedInstanceState)
initState(savedInstanceState);
else
initStage(getArguments());
}
private void initState(Bundle bundle) {
mData = bundle.getParcelable(ARG_DATA);
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(ARG_DATA, mData);
}
在活动中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container);
if (findViewById(R.id.fragment_container) != null) {
Fragment fragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);
if (null == fragment) {
MyData data = getIntent().getParcelableExtra(ARG_DATA);
fragment = MyFragment.newInstance(data);
fragment.setRetainInstance(true);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
}
}
}
但是如果托管Activity及其片段将被销毁并再次创建,会发生什么?它会重新创建片段并尝试用旧参数初始化它吗?如何避免这种情况,我是否每次都要将数据传回活动,然后它会被销毁?那么拥有片段有什么意义呢?
由于
更新
为了解释这个问题,我有一个服务工作来保存核心数据。我只需要Activity来显示数据,例如在db中创建一条新记录。但是我最初发现的是,如果Activity被破坏并重新创建,它还将重新创建底层Fragment并使用数据初始化它,坐在Activity参数包中。并且所有用户更改都将丢失。我想要的是,在Fragment创建之后,它将存储用户提交的数据,直到用户点击"提交"按钮并退出活动。因此,即使用户离开活动然后回来,他也不会丢失他已经输入的数据。问题是,我无法在用户输入内容后直接更新记录。这是一个复杂的系统,记录不仅转到本地数据库,服务也会将其发送到服务器,我希望最大限度地减少电话和服务器之间的流量。
答案 0 :(得分:0)
我在SO Fragment calling fragments loosing state on screen rotation上回答了类似的问题。搜索我的用户名" The Original Android"。
与您的代码相比,示例代码存在差异,即主要活动具有已保存的数据或状态。原因是Fragment数据可能会被破坏,从内存中消失。但是当用户退出应用程序时,主要活动会被破坏,并且应用程序的生命周期通常会终止。因此,在主要活动中存储数据更安全。
修改强>: 如果您想阅读片段生命周期,那就是@ Fragments。
祝你好运,让我们发布......