gpt4 book ai didi

Android Fragment 和重新加载应用程序

转载 作者:太空狗 更新时间:2023-10-29 13:30:23 27 4
gpt4 key购买 nike

我有我的 FragmentActivity :

public class FragmentActivity extends FragmentActivity
{
// ...
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
myFragment = (MyFragment) getSupportFragmentManager().getFragment(
savedInstanceState, MyFragment.class.getName());
}
else {
myFragment = new Fragment(myObject);
}
}
}

在我的 fragment 中:

public class MyFragment extends Fragment
{
public MyFragment(myObject) {
super();
this.myObject = myObject;
setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
MyDAO myDAO = new MyDAO (myObject);
}
}

一切正常,除了当我关闭我的应用程序时,做一些事情(我的应用程序进入后台)然后重新启动我的应用程序。我在

上得到一个 NullPointerException
MyDAO myDAO = new MyDAO (myObject);

其中 myObject 为空。

savedInstanceState 被称为...我不明白它是如何工作的。

最佳答案

系统正在终止您的进程,并且正在对 myObject 的实例进行垃圾回收。设置要保留的实例仅在方向更改之间有用,但请记住,当系统内存不足时,您在后台运行的应用程序可能会被终止。而是将此变量作为参数传递。在 MyDAO 类上实现 Parcelable 或 Serializable 很重要。

PS.: 你的 fragment 需要有一个空的构造函数,因为系统会在你的 Activity 被重新创建时重新创建它的实例:

public MyFragment() {

}


public MyFragment(myObject) {
super();
setRetainInstance(true);
Bundle args = new Bundle();
args.putParcelable("myObject", myObject);
setArguments(args);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myObject = getArguments().getParcelable("myObject");
MyDAO myDAO = new MyDAO (myObject);
}

关于Android Fragment 和重新加载应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16215364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com