Android - 使用FragmentPagerAdapter和旋转设备时的NPE

时间:2018-05-12 19:51:22

标签: android android-fragments android-viewpager mvp android-mvp

我正在尝试按照Google's sample todo app

实施MVP架构

我遇到的问题是,在NPE的{​​{1}}中启动presenter时,我收到了onResume()。当我改变设备的方向时会发生这种情况。

我有一个fragments,其中包含两个静态FragmentPagerAdapter

根据我的理解,fragments意味着在屏幕旋转时保留FragmentPagerAdapter,这意味着fragments将保留其fragments。但是presenters中的presenters为空,因此有些内容我不理解。

感谢任何帮助/评论。

编辑:

这是我目前的FragmentPagerAdapter

onResume()

2 个答案:

答案 0 :(得分:0)

说实话,Android中的碎片是如此麻烦,经过几年的Android开发,我对他们感到沮丧。我使用这样的东西,在这种情况下会很有用:

public class MyAdapter extends FragmentStatePagerAdapter{

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int pos) {
        switch(pos) {

            case GlobalAppKeys.FRAGMENT_HOME:
                return HomeFragment.newInstance(pos);
            case GlobalAppKeys.FRAGMENT_NEXT:
                return NextFragment.newInstance(pos);
            default:
                return new Fragment();
        }
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public int getItemPosition(Object object) {
        // refresh all fragments when data set changed
        if (object instanceof HomeFragment){
            HomeFragment hF = (HomeFragment) object;
            if (hF != null) {
                hF.updateThisFragment();
            }
        }

        return super.getItemPosition(object);
    }
}

答案 1 :(得分:0)

所以事实证明即使用FragmentPagerAdapter片段在配置更改后实际销毁(例如屏幕旋转),所以我最初的假设是错误的。我通过覆盖并在片段的onDestroy方法中添加了一个print语句来找到它。

在我的情况下,为了保留演示者,我只需要在片段的setRetainInstance(true)方法中onCreate