Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 配置更改后未在viewpager中调用Fragment.onCreateView()_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android 配置更改后未在viewpager中调用Fragment.onCreateView()

Android 配置更改后未在viewpager中调用Fragment.onCreateView(),android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,更改方向后,将重新创建我的活动和viewpager(列表/详细信息类型),如果我在列表中选择了一个项目,该活动将崩溃 我不想为所有细节打扰您(存在nullpointerexception,因为onCreateView()中引用的textview为null)。 我的问题是:ViewPager如何在不调用onCreateView()的情况下显示两个页面,每个页面中都有一个片段 在启动应用程序之后,如何在启动设备之前工作良好 我只有2页/片段。但我看到调试器在重新创建此活动时创建了4个片段。你知道为什

更改方向后,将重新创建我的活动和viewpager(列表/详细信息类型),如果我在列表中选择了一个项目,该活动将崩溃

我不想为所有细节打扰您(存在nullpointerexception,因为onCreateView()中引用的textview为null)。 我的问题是:ViewPager如何在不调用onCreateView()的情况下显示两个页面,每个页面中都有一个片段

在启动应用程序之后,如何在启动设备之前工作良好

我只有2页/片段。但我看到调试器在重新创建此活动时创建了4个片段。你知道为什么和在哪里有记录吗

有解决办法吗?提前感谢你的帮助。我在这里迷路了,因为我自己不能控制碎片,viewpager可以

==========

更新:请查看以下附加信息

public class  DetailFragment extends Fragment {
    TextView mDetailTV;
    // Retrieve the data to display from the parent activity
    private String getData() {
        ViewPagerActivity activity = (ViewPagerActivity)getActivity();
        return( activity.detailArray[activity.mPosition] );
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_detail_fragment, container, false);
        mDetailTV = (TextView)view.findViewById(R.id.detailTV);
        displayDetail(getData());   
        return view;
    }
    // Display data
    void displayDetail(String data) {       
        mDetailTV.setText(data);
    }
列表和详细信息片段被实例化并传递给寻呼机适配器,如下所示:

mListFragment = new ListFragmentt();
mDetailFragment = new DetailFragment();
mPagerAdapter = new MFragmentPagerAdapter(getSupportFragmentManager(), mListFragment, mDetailFragment);

此外,列表/详细信息中的数据来自经典的Skakespeare示例,因此我怀疑我的三星S4内存不足。

我通过删除FragmentActivity超类的onSaveInstanceState调用修复了我的问题,如下所示:

受保护的空碎片活动(束超出状态){ }


但我仍然不明白在碎片活动的超类中发生了什么。这只是一个直觉上的猜测成功了。我不明白背后的理论。如果有人能解释一下,那就太好了。

默认情况下,
ViewPager
会缓存两个相邻的片段。因此,不需要显式调用
onCreateView

您可以将活动发布到oncreate code吗?您可以缓存视图,以防页面太多(或者您认为视图不会占用太多内存),然后返回onCreateView的缓存视图。此外,为了避免OOM,您可以使用WeakReference对缓存视图进行引用,以防您担心内存问题。我尝试使用mViewPager.setOffscreenPageLimit(2)缓存页面,但仍然存在nullPointerException。您的意思是我们可以缓存重新创建的活动吗?