你想获取嵌在ViewPager中的Fragment的目的是什么?更新Fragment吗? 如果是这个目的的话,需要实现ViewPager的FragmentPagerAdapter,然后override方法 getItemPosition(Object object) ,把入口参数object强制转型为你定义的Fragment类; 所以你还需要为自定义的Fragment实现一个public方法,比如 public void update() 用来更新界面。
getItemPosition(Object object)
public void update()
你需要调用这个方法 PagerAdapter.notifyDataSetChanged() , getItemPosition 才会被调用到。 不建议通过记录tag或者id的方式来管理ViewPager内的Fragment。
PagerAdapter.notifyDataSetChanged()
getItemPosition
之前对问题的理解错了,你的问题应该从生命周期和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对应的生命周期函数会再走一遍。
Fragment getItem(int position);
onCreateView()
getItem(0)
所以结论是,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:hoverLaravel实现用户注册和登录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的时候怎么定义相对路径?
当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()