首页 > 解决方案 > 在 onCreate 中获取保存的片段实例时,尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()”

问题描述

我创建了一个 Activity 并使用带有 2 个片段的 FragmentStatePagerAdapter。

在 onSaveInstanceState 上,我正在保存两个片段。

@Override
protected void onSaveInstanceState(Bundle outState) {
    try {
        getSupportFragmentManager().putFragment(outState,
                BirthDetailInputFragment.class.getName(),
                birthDetailInputFragment);
        getSupportFragmentManager().putFragment(outState,
                SearchBirthDetailsFragment.class.getName(),
                searchBirthDetailsFragment);
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.onSaveInstanceState(outState);
}

这样我就可以在 onCreate() 中获取保存的实例,如下所示。

if (savedInstanceState != null) {
        try {

            birthDetailInputFragment = (BirthDetailInputFragment) getSupportFragmentManager()
                    .getFragment(savedInstanceState,
                            BirthDetailInputFragment.class.getName());
            searchBirthDetailsFragment = (SearchBirthDetailsFragment) getSupportFragmentManager()
                    .getFragment(savedInstanceState,
                            SearchBirthDetailsFragment.class.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        searchBirthDetailsFragment = new SearchBirthDetailsFragment();
        birthDetailInputFragment = new BirthDetailInputFragment();
    }

但是当我改变方向时,它给了我下面的异常 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference in above catch block。

任何指导将不胜感激。

标签: androidperformanceandroid-fragments

解决方案


将数据保存在 onSaveInstanceState 中。并在 onRestoreInstanceState 中恢复数据 - 而不是 oncreate();


推荐阅读