Android 关于fragment切换问题
问题:
在使用viewPager展示fragment 的时候,发现切换view时总是重新加载,可是原本的view中已经有了改变,要如何保留呢?
答:viewPager切换fragment 时,fragment 会像activity 那样调用onStart,onResume,但是 fragment还会先调用onCreateView,这样就很容易不小心就覆盖原来的view。另外,fragment被切换掉时在onStop()方法之后会运行onDestroyView,而onCreateView()这个方法是用来初始化view,onDestroyView这个方法是用来销毁view的。值得注意的是onDestroyView销毁的是FragmentManager中fragment对应的view(或者说是布局内容)(以下代码是跟踪onDestroyView方法是注意到的)。
void moveToState(Fragment f, int newState,
int transit,
int transitionStyle,
boolean keepActive){
...//中间还有一堆,但不是很重要
switch (f.mState) {
...//fragment中的view被赋予了"null"
f.mContainer = null;
f.mView = null;
...
}
...
}
也就是说,在fragme中实例化的对象还未销毁,那么就可以将onCreateView创建的View赋值给类中的一个view对象(通常是私有的),然后在onCreateView中先判断view是否为null,不是就可以直接返回。