现象:有个主界面,为MainAcitivty,用ViewPager+FragmentPagerAdapter加载了一个Fragment。结果在重启应用时,Frgment未被销毁,启动时,又重新建立Fragment,导致多个重复的Fragment
FragmentPagerAdapter有个回调接口如下:
@Override
public long getItemId(int position) {
return mPresenter.getFragment(position).hashCode();
启动应用方法如下:
Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
PhoneDao.saveRunRecord(false, exitType);
解决方法:将FragmentPagerAdapter的getItemId接口去掉即可。
原因:欢迎百度以上两个Adapter不同之处!
FragmentStatePagerAdapter - 简书
一般的话,
view
page
会缓存一个页面,多余的页面会
销毁
,重新滑动回来的时候回
fragment
回被
销毁
并重新加载,可能导致多吃初始化数据
解决方案1
page
r.setOffscreen
Page
Limit(2);
解决方案2 保存好这状态下次恢复的时候只是使用
解决方案3 在adapter 覆盖 destoryItem 方法
今天我们的界面大幅改动,最终改成现在主流的Tab类型,和微信有点类似,下面有四个Tab对于四个不一样的模块。
但是这个四个界面都需要访问网络,并且我们开发框架用的是注解框架,导致对请求网络不好管理。,
而且又是
view
page
r+
fragment
我们计划是在第一个页面将四个模板全部初始化,然后放到集合里面,这样即使用户任意切换都不会有问题,因为我们已经初始化了,
但是用过
view
page
...
一般我们切换
fragment
都用replace方法实现,但是这样的做法是有缺点的,当你从这个
fragment
切换到另一个
fragment
的时候当前的
fragment
会被系统回收掉,当你再次切换此
fragment
的时候就要重新加载数据了,这样子用户体验不好
public void start
Fragment
Add(
Fragment
fragment
) {
Fragment
Manager
fragment
Manager = getSupport
Fragment
Manager();