添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

你想获取嵌在ViewPager中的Fragment的目的是什么?更新Fragment吗?
如果是这个目的的话,需要实现ViewPager的FragmentPagerAdapter,然后override方法 getItemPosition(Object object) ,把入口参数object强制转型为你定义的Fragment类;
所以你还需要为自定义的Fragment实现一个public方法,比如 public void update() 用来更新界面。

你需要调用这个方法 PagerAdapter.notifyDataSetChanged() , getItemPosition 才会被调用到。
不建议通过记录tag或者id的方式来管理ViewPager内的Fragment。

Update

之前对问题的理解错了,你的问题应该从生命周期和ViewPager的adapter来理解。

Fragment具有和Activity相似的生命周期,并且其生命周期方法由托管它的Activity调用。
当把一些Fragment放入ViewPager时,就需要adapter的支持,以管理这些Fragment。对于常用的两种adapter,FragmentStatePagerAdapter会销毁掉不需要的fragment,而FragmentPagerAdapter只是销毁了fragment的视图。

这些都是交由Adapter来管理的,你只需要覆写adapter相应的方法以创建Fragment并提供给adapter。
不需要做检查,检查的工作是由adapter来完成的 。比如,

最开始处于第0页时,adapter不仅为第0页创建Fragment实例,还为相邻的第1页创建了Fragment实例,此时覆写的 Fragment getItem(int position); 就会被调用2次;
第1次从第0页滑到第1页,adapter同样会为相邻的第2页创建Fragment实例; Fragment getItem(int position); 又被调用1次;
此时,从第2页返回第0页,
对于FragmentPagerAdapter,第0页仅视图被销毁了,所以它的 onCreateView() 会被调用到。
对于FragmentStatePagerAdapter,第0页的实例被销毁了,所以 getItem(0) 会被再次调用,整个Fragment对应的生命周期函数会再走一遍。

所以结论是,ViewPager中的Fragment交由Adapter管理,你不需要担心是否重建。你只需要根据应用场景选择合适的adapter。

更详细的说明,你可以参考我之前整理的一篇文章中的一部分ViewPager和它的adapter是如何配合工作的?

下面是相关的生命周期函数调用情况:

当刚启动一个Activity时,Activity和Fragment都将被创建:

10-14 00:13:36.135: D/FragmentActivity(23141): onCreate()
10-14 00:13:36.371: D/FragmentActivity(23141): onStart()
10-14 00:13:36.371: D/FragmentActivity(23141): onResume()
10-14 00:13:36.449: D/FragmentActivity(23141): getItem(0)
10-14 00:13:36.452: D/Fragment0(23141): newInstance(2015-10-14)
10-14 00:13:36.452: D/FragmentActivity(23141): getItem(1)
10-14 00:13:36.453: D/Fragment1(23141): newInstance(Page1)
10-14 00:13:36.453: D/Fragment0(23141): onAttach()
10-14 00:13:36.453: D/Fragment0(23141): onCreate()
10-14 00:13:36.453: D/Fragment0(23141): onCreateView()
10-14 00:13:36.457: D/Fragment0(23141): onViewStateRestored
10-14 00:13:36.458: D/Fragment0(23141): onStart()
10-14 00:13:36.458: D/Fragment0(23141): onResume()
10-14 00:13:36.458: D/Fragment1(23141): onAttach()
10-14 00:13:36.458: D/Fragment1(23141): onCreate()
10-14 00:13:36.458: D/Fragment1(23141): onCreateView()
10-14 00:13:36.465: D/Fragment1(23141): onStart()
10-14 00:13:36.465: D/Fragment1(23141): onResume()

当Activity进入后台后:

10-14 00:14:13.273: D/Fragment0(23141): onPause()
10-14 00:14:13.273: D/Fragment1(23141): onPause()
10-14 00:14:13.273: D/FragmentActivity(23141): onPause()
10-14 00:14:14.190: D/Fragment0(23141): onSaveInstanceState()
10-14 00:14:14.191: D/Fragment1(23141): onSaveInstanceState()
10-14 00:14:14.191: D/Fragment0(23141): onStop()
10-14 00:14:14.191: D/Fragment1(23141): onStop()
10-14 00:14:14.191: D/FragmentActivity(23141): onStop()

当Activity返回前台后:

10-14 00:14:37.410: D/Fragment0(23141): onStart()
10-14 00:14:37.410: D/Fragment1(23141): onStart()
10-14 00:14:37.411: D/FragmentActivity(23141): onStart()
10-14 00:14:37.411: D/FragmentActivity(23141): onResume()
10-14 00:14:37.431: D/Fragment0(23141): onResume()
10-14 00:14:37.432: D/Fragment1(23141): onResume()

当Activity被销毁后:

10-14 00:14:58.725: D/Fragment0(23141): onPause()
10-14 00:14:58.726: D/Fragment1(23141): onPause()
10-14 00:14:58.726: D/FragmentActivity(23141): onPause()
10-14 00:14:59.412: D/Fragment0(23141): onStop()
10-14 00:14:59.412: D/Fragment1(23141): onStop()
10-14 00:14:59.412: D/FragmentActivity(23141): onStop()
10-14 00:14:59.413: D/Fragment0(23141): onDestroyView()
10-14 00:14:59.413: D/Fragment0(23141): onDestroy()
10-14 00:14:59.413: D/Fragment0(23141): onDetach()
10-14 00:14:59.414: D/Fragment1(23141): onDestroyView()
10-14 00:14:59.414: D/Fragment1(23141): onDestroy()
10-14 00:14:59.414: D/Fragment1(23141): onDetach()
10-14 00:14:59.414: D/FragmentActivity(23141): onDestroy()
  • jquery捕捉回车键及获取checkbox值与异步请求的方法
  • Android ListView实现上拉加载更多和下拉刷新功能
  • Mac环境下php操作mysql数据库的方法分享
  • php5.3提示Function ereg() is deprecated Error问题解决方法
  • 零基础写Java知乎爬虫之准备工作
  • nodejs 整合kindEditor实现图片上传
  • MongoDB下根据数组大小进行查询的方法
  • 升级Win10系统错误0xC1900101-0x3000d解决方法
  • MySQL索引使用全程分析
  • 在linode无法启动iptables并出现错误的解决方法
  • Android 通用型手电筒代码
  • PHP使用CURL模拟登录的方法
  • js实现异步循环实现代码
  • php简单获取目录列表的方法
  • 剖析设计模式编程中C#对于组合模式的运用
  • js实现iframe跨页面调用函数的方法
  • 超实用的JavaScript代码段 附使用方法
  • Android编程中FileOutputStream与openFileOutput()的区别分析
  • centos7系统中挂盘硬盘报错该怎么办?
  • 使IE6支持:hover效果使用li:hover或div:hover
  • Laravel实现用户注册和登录
  • PHP使用strstr()函数获取指定字符串后所有字符的方法
  • IOS手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)
  • JQuery+Ajax实现数据查询、排序和分页功能
  • 【热门文章】
  • 为什么我的Scrapy爬不出数据?
  • GitHub 打不开怎么办?
  • 请会用js的哥们帮分析一下以下代码
  • 能用纯js获取youtube视频的下载链接吗?
  • zepto构建移动端页面
  • DOM问题:点击按钮的时候,修改input元素的value属性值,为什么在HTML结构上没有变化?
  • 在SUM()里使用SQL变量导致不可预见的结果
  • DZ中的UCenter能不能做一个开放接口,可以采用OAuth方式登陆?
  • core foundation与objective-c区别?
  • Redis存储账户余额
  • 在SSH框架上,dao中openSession得到的session怎么绑定到spring的事务上
  • php微信开发,求大牛看看那里问题
  • 绑定了自定义域名,却无法跳转
  • 开发一个基于PHP 的后台管理系统,相当于一个招生系统的界面,有什么推荐的吗?
  • Spring mvc的 ModelAndView的这个地址根本不存在,为什么还是能正常打开?
  • php ftp断点续传上传文件
  • 如何正则匹配包含特定字符串的字符串
  • 关于c语言函数malloc 的一些问题。
  • thinkPHP3.2.3的部署到sae,提示模板不存在,是什么原因呢?
  • 请教一个用gulp的时候怎么定义相对路径?
  •