防止ViewPager中的Fragment被销毁的方法,更加流畅

在使用ViewPager与Fragment的时候,ViewPager会自动缓存1页内的数据,如下图:

当我们当前处在页面2的时候,页面1和页面3的View实际上已经创建好了,所以在我们拖动的时候是可以看见他们的界面的。

但是当我们的页面处在1的时候,页面3实际上就已经销毁了。直到跳转到页面2的时候,页面3才会创建View。

这时,如果页面3中有需要耗时的事件,比如网络访问。那么,在我们进行 1-->2
的操作的时候,就会不断的出现页面3加载的对话框(如果有的话)。而且如果快速的 1-->2-->3的切换,3中的内容很可能还没加载出来。

这样重复的加载,既影响体验、又耗费时间和流量,所以笔者这两天一直在查如何在Fragment移出的时候不要销毁,或者保存状态。

后来发现真是多此一举,如果您的软件对内存消耗不是很在意的话,只需加入以下代码:

[java] view
plain
copy

  1. pager.setOffscreenPageLimit(2);

就可以让ViewPager多缓存一个页面,这样上面的问题就得到了解决。

当然这只是个取巧的方法,如果有比较好的保存状态的方法会更好。

转载请注明来自:http://blog.csdn.net/icyfox_bupt/article/details/18356461

时间: 2024-10-11 23:18:15

防止ViewPager中的Fragment被销毁的方法,更加流畅的相关文章

(转)防止ViewPager中的Fragment被销毁的方法

在使用ViewPager与Fragment的时候,ViewPager会自动缓存1页内的数据,如下图: 当我们当前处在页面2的时候,页面1和页面3的View实际上已经创建好了,所以在我们拖动的时候是可以看见他们的界面的. 但是当我们的页面处在1的时候,页面3实际上就已经销毁了.直到跳转到页面2的时候,页面3才会创建View. 这时,如果页面3中有需要耗时的事件,比如网络访问.那么,在我们进行 1-->2 的操作的时候,就会不断的出现页面3加载的对话框(如果有的话).而且如果快速的 1-->2--

防止ViewPager中的Fragment被销毁

pager.setOffscreenPageLimit(2); 就可以让ViewPager多缓存一个页面 防止ViewPager中的Fragment被销毁,布布扣,bubuko.com

友盟页面统计 - 关于Viewpager中的Fragment的生命周期

Activity和Fragment各自理论上的生命周期 Activity的生命周期是较为经典也最清晰的.在此不表: Fragment从出现到广泛运用也有一段时间了.其标准生命周期也仅比Activity多出一些流程,如onCreateView(); Activity和Fragment在实际编码中必然是结合出现的,表现为Activity作为容器,装载有一个或若干个Fragment: 装载多个Fragment时,常常使用TabHost和Viewpager作为载体: 在实际编码中发现,Activity和

在Viewpager中的Fragment使用ContextMenu问题

ContextMenu用法 上下文菜单ContextMenu由系统支持,常用于通过长按控件弹出列表形菜单,实现步骤如下 onCreateContextMenu方法 创建菜单 registerForContextMenu方法,为需响应的控件注册 onContextItemSelected方法,响应点击 在Viewpager中的Fragment使用ContextMenu发生的问题 在我的具体项目环境中,Viewpager中存在3个Fragment(0/1/2),并继承自一个父类BaseFragmen

在ViewPager中切换Fragment 不重新创建 - Android

在使用Viewpager滑动Fragment时,ViewPager只会保存当前页两边的Fragment状态.这样就会出现这样的情况: 一打开会初始化page1和page2,当手动切换到page3时page4就会初始化,但是page1就会销毁,当再切换到page1时page1就会重新初始化. 其实这是Viewpager提供的一种性能优化,叫做懒加载. 但是这种情况会导致切换时page中的布局老是重新创建,状态保存不了,体验不流畅,解决办法就是设置Viewpage的缓存页数; android.sup

求解viewpager中的fragment切换,怎么返回数据到activity

============问题描述============ 例如: activity含有一个viewpager和一个textview viewpager有3个fragment可以左右滑动, 滑动到第一个fragment,activity中的textview显示1 滑动到第二个fragment,activity中的textview显示2 滑动到第三个fragment,activity中的textview显示3 这应该怎么处理? ============解决方案1============ ViewPa

67、activity中调用fragment内部自定义的方法

fragment: /** * author: Created by zzl on 15/11/19. */ @SuppressLint("validFragment") public class pushMealHistoryFragment extends Fragment { Context ctxt; View gridALl; public pushMealHistoryFragment(Context ctxt) { this.ctxt = ctxt; } @Nullabl

向 ViewPager 中添加 包含 ListView 的 Fragment

对与fragment就不说什么了,直接看API手册吧,亲. 向 ViewPager 中添加 包含 ListView 的 Fragment 的过程比较麻烦.他所表现的效果就是新闻客户端的滑动翻页效果. 在这里就不粘代码了.只把思路理一下.代码有时间再粘: 一,你需要一个 ViewPager :在实验时,我的activity中就只有一个ViewPager.没有别的东西. 二,你需要一个自定义的fragment,在我们这里的话,这种fragment中有一个listView就可以了(布局文件中只有一个L

viewpager中彻底性动态添加、删除Fragment

为了解决彻底删除fragment,我们要做的是:1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出: 后者 可以满足我们的需求.2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可: @Override public int getItem