我正在尝试通过遵循Google's sample todo app来实现MVP体系结构
我遇到的问题是,当我在片段的onResume()
中启动演示程序时,我会得到一个NPE。当我改变设备的方向时,就会发生这种情况。
我有一个带有两个静态片段的FragmentPagerAdapter
。
据我所知,FragmentPagerAdapter
是为了在屏幕旋转时保留片段,这意味着片段将保留它们的演示者。然而,在onResume()
中,演示者是空的,所以有些事情我不明白。
这是我当前的FragmentPagerAdapter
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
FragmentA fragA = FragmentA.newInstance();
PresenterA presA = new PresenterA(fragA);
return fragA;
case 1:
FragmentB fragB = FragmentB.newInstance();
PresenterB presB = new PresenterB(fragB);
return fragB;
}
return null;
}
@Override
public int getCount() {
return 2;
}
}
2条答案
按热度按时间lbsnaicq1#
老实说,在Android的碎片是这样一个麻烦,我得到他们沮丧的这一天后,相当多的几年的Android开发.我用这样的东西,将在这种情况下有用:
g52tjvyc2#
因此,即使使用
FragmentPagerAdapter
,片段实际上也会在配置更改(例如,屏幕旋转)后被销毁,因此我最初的假设是错误的。我通过覆盖并在片段的onDestroy
方法中添加print语句发现了这一点。在我的例子中,为了保留演示者,我只需要在片段的
onCreate
方法中使用setRetainInstance(true)
。