ViewPager中Fragment的重复创建、复用问题
在ViewPager中的Fragment的生命周期 随着页面的切换 当前的展示页相邻的页面生命周期一直在变化

一开始 刚进入Activity时候,ViewPager默认初始化好前两个Fragment(消息和任务)
消息 ->任务
05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 团队onAttach
05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 团队onCreate
05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 团队onCreateView
05-09 14:47:39.603 31509-31509/tyh.com.tablayout E/TYH: 团队onStart
05-09 14:47:39.603 31509-31509/tyh.com.tablayout E/TYH: 团队onResume
任务 ->团队
5-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onPause
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onStop
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onDestroyView
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 部门onAttach
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 部门onCreate
05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部门onCreateView
05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部门onStart
05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部门onResume
团队 ->部门
05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任务onPause
05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任务onStop
05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任务onDestroyView
部门 ->团队
05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任务onCreateView
05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任务onStart
05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任务onResume
你会发现 当 Fragment完成onCreate之后再去切换的时候 只会执行onCreateView和onDestroyView方法不会再去onCreate
那么如何避免重复的创建和销毁呢 解决方案如下:
方案一(不推荐):
mViewPager.setOffscreenPageLimit(4);
方案二(推荐):
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if(view==null){
view = inflater.inflate(R.layout.contentfragment,container,false);
tvContent = (TextView) view.findViewById(R.id.tv_content);
String string = getArguments().getString(KEY);
tvContent.setText(string);
tvContent.setTextColor(Color.BLUE);
tvContent.setTextSize(30);
}
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if(view!=null){
view.getParent().remove(view);
}
}
如此当重新创建Fragment的时候就会复用之前创建好的View不会重复创建
ViewPager中Fragment的重复创建、复用问题的更多相关文章
- FragmentManager中Fragment的重复创建、复用问题
当我们在Activity中使用 Fragment可以用FragmentManager去添加到对应个ViewGoup中使用 FragmentManager fragmentManager = getSu ...
- ViewPager中Fragment切换过程不被销毁的方法
背景:最近在写一个音乐播放器,然后一个ViewPager里面加载了四个Fragment,但是在切换过程中发现,Fragment总是被销毁,在网上查了一下,发现有两种办法可以保证Fragment不被销毁 ...
- ViewPager中Fragment无法显示的问题
问题描述: Actvitiy->Fragment1 ->Fragment2 Fragment1中有1个ViewPager,ViewPager里面有包括了2个Fragment. 当第一次执行 ...
- 友盟页面统计 - 关于Viewpager中的Fragment的生命周期
Activity和Fragment各自理论上的生命周期 Activity的生命周期是较为经典也最清晰的,在此不表: Fragment从出现到广泛运用也有一段时间了,其标准生命周期也仅比Activity ...
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- 防止ViewPager中的Fragment被销毁的方法,更加流畅
在使用ViewPager与Fragment的时候,ViewPager会自动缓存1页内的数据,如下图: 当我们当前处在页面2的时候,页面1和页面3的View实际上已经创建好了,所以在我们拖动的时候是可以 ...
- 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3 2.Fragment生命周期以及与Activ ...
- 转载【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 原文链接 http://www.cnblogs.com/monodin/p/3866441.html 1.使用场景 ViewPager+ ...
- ViewPager中切换界面Fragment被销毁的问题
ViewPager中切换界面Fragment被销毁的问题分析 使用ViewPager+Fragment实现界面切换,当界面数量大于3时,出现二次滑动后数据消失的情况,下面由Fragment生命周期进行 ...
随机推荐
- let const区别!
这次做项目在申明变量的时候用到let const 总结下这两个区别 : 首先 let与const都是只在声明所在的块级作用域内有效. let声明的变量可以改变,值和类型都可以改变,没有限制.const ...
- 事件&表达式
typeFaqs.ForEach(async p => { var results = await ; p.Results = results; }); https://stackoverfl ...
- sql server top 10 IO性能查询
use master go ), ((case qs.statement_end_offset then datalength(qt.text) else qs.statement_end_offse ...
- win10系统搜索不到某些老式打印机
问题: win10系统在设置选项里面搜索打印机,却找不到打印机. 百度了一下: 基本说的是驱动问题. 解决方法: 1.下载lansee局域网扫描软件 2.打开嗅探工具点击开始 3.搜索出来之后,会在共 ...
- log4j实现日志的输出
1.log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等;我们 ...
- SpringMvc实现的简单原理
1.浏览器发送请求 2.服务器执行servlet的(前端控制器)解析器 3.servlet通过(前端控制器)解析器拿到所有带有@Controller注解的类,并遍历类中的所有方法 4.将遍历的方法中带 ...
- Django基础回顾与补充(79-80)
Django框架之回顾与补充(d79-80)一 HTTP协议:(重点) 1 请求 -请求首行 -GET /index HTTP/1.1 -请求头部(在django框架中,可以从META ...
- 国内最全的Spring Boot系列之二
历史文章 <国内最全的Spring Boot系列之一> 视频&交流平台 SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http:/ ...
- iOS Simulator version 11 or later is currently not supported.
iOS Simulator version 11 or later is currently not supported.You can open Xcode > Preferences > ...
- WPF 主窗口关闭时结束所有相关线程
程序主窗口的 Closed 事件中添加代码: Process.GetCurrentProcess().Kill();