Fragment防止自动清理 (ViewPager滑动时,滑出屏幕后被清理)
来源:互联网 发布:白城广逸网络地点 编辑:程序博客网 时间:2024/04/30 23:23
这个问题网上搜一搜发现帖子很多,但是博主试了几种好像没有说的那么好用
一.比如给ViewPager设置长度,以增加缓存的Fragment数目。(不靠谱)
二.滑出屏幕的时候存储加载的数据,createView的时候重新读取(需要读写数据,不推荐)
下面介绍我自己用到的方法,你根本想不到原来这么简单。
你先要明白Fragment的生命周期如下
此图能清楚的看出Fragment被后台运行后重新创建的过程
onDestoryView():Fragment被FragmentManagerfag放在后台运行,注意,这里只是在后台运行了,并没有真正的销毁,也就是说,这个片段的进程还是存在的,只是放在了后台运行。
onCreateView():再次显示的时候和第一次创建的时候调用,
所以说,只要你的Fragment没有被真正的销毁,你的Fragment的当中的数据是存在的,那么为什么会出现Fragment重复加载的现象呢,这里大多数人犯了一个错误,把控件和数据的初始化放在了onCreateView当中,包括我,之前一直是这么做的,这就导致了你fragment再次唤醒的时候重新加载了界面和数据。
解决方案:
onCreate()是在onCreateView()之前调用的,那么你在onCreate中初始化好在onCreateView中要返回的view和数据,onCreateView只负责返回一个界面视图View就好了。赶紧去试试吧,我今天刚发现的(如下代码示例)。
补充说明:
错误示范(这种不会导致程序异常,但是会在重新加载Fragment时重新绘制界面):
public class FragmentTest extends Fragment {private View mView;@Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {mView = inflater.inflate(R.layout.activity_main, container, false);return mView;}}
推荐示例(不会导致Fragment重新加载,但是需要在销毁View的时候remove掉父控件):
public class FragmentTest extends Fragment {private View mView;private TextView mTextView;@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//初始化视图和数据mView = getActivity().getLayoutInflater().inflate(R.layout.activity_main, null);mTextView=(TextView)mView.findViewById(R.id.textview1);mTextView.setText("HelloWorld");}@Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {return mView;//这里是返回的视图}@Overridepublic void onDestroyView() {// TODO Auto-generated method stubsuper.onDestroyView();//在销毁视图的时候把父控件remove一下,不然重新加载的时候会异常导致奔溃,提示should remove parent viewViewGroup mGroup=(ViewGroup) mView.getParent();if(mGroup!=null){mGroup.removeAllViewsInLayout();}}}
- Fragment防止自动清理 (ViewPager滑动时,滑出屏幕后被清理)
- Fragment防止自动清理 (ViewPager滑动时,滑出屏幕后被清理)(转)
- Activity+ViewPager+Fragment 手机管家清理之后异常状况解决
- 防止系统清理
- 清理
- 清理
- 清理
- ViewPager+Fragment+RecyclerView,当切换viewpager时,recyclerview自动滑动问题
- ViewPager+Fragment+RecyclerView,当切换viewpager时,recyclerview自动滑动问题记录
- 当tabLayout+viewPager滑动时,滑动N次后viewPager中的fragment会变成空白页的问题
- 自动清理数据库日志
- linux自动清理工具
- 火狐自动清理缓存
- zookeeper自动清理日志
- IIS日志自动清理
- 自动清理归档
- Linux自动清理日志
- elasticsearch索引自动清理
- 数据仓库和数据集市的区别
- HDU 1342 Lotto 【DFS】
- 双系统安装
- 【Leetcode】Populating Next Right Pointers in Each Node in JAVA
- gentoo软件安装
- Fragment防止自动清理 (ViewPager滑动时,滑出屏幕后被清理)
- C++标准库和命名空间
- Android4.4 Framework分析——getContentResolver启动ContentProvider的过程
- 谈谈C++私有继承
- 消息摘要算法-MAC算法系列
- [Leetcode]Jump Game && Jump Game II
- 琐碎事情
- jsoup:解析HTML用法小结
- 心跳数据采集及简单处理-黄