【问题标题】:Android Fragment and reload applicationAndroid Fragment 和重新加载应用程序
【发布时间】:2013-04-19 09:12:44
【问题描述】:

我有我的 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);
         }
    }
}

在我的片段中:

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 被调用...我不明白它是如何工作的。

TY

【问题讨论】:

标签: android instance fragment reload


【解决方案1】:

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

PS.:您的片段需要有一个空的构造函数,因为系统会在重新创建活动时重新创建其实例:

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);
}

【讨论】:

  • TY Flavio,这正在工作,我的应用程序再次启动,这要归功于 bundle 和 Parcelable。
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多