Fragment保持状态切换,fragment状态切换

在使用Activity管理多个Fragment时,每次切换Fragment使用的是replace,结果导致出现xxx is not currently in the FragmentManager异常挂掉

网上说使用replace切换会使被切换的Fragment给替换掉,从而被被切换的Fragment的view从viewtree中删除,致使切换过程中每次都要重新创建Fragment

每次使用add添加Fragment,当再次切换到时用show显示,而被切换的Fragment用hide隐藏,具体代码如下:

 1     /**
 2      * Fragment跳转
 3      * @param fm
 4      * @param fragmentClass
 5      * @param tag
 6      * @param args
 7      */
 8     public void turnToFragment(Class<? extends Fragment> fromFragmentClass, Class<? extends Fragment> toFragmentClass, Bundle args) {
 9
10         FragmentManager fm = getSupportFragmentManager();
11         //被切换的Fragment标签
12         String fromTag = fromFragmentClass.getSimpleName();
13         //切换到的Fragment标签
14         String toTag = toFragmentClass.getSimpleName();
15         //查找切换的Fragment
16         Fragment fromFragment = fm.findFragmentByTag(fromTag);
17         Fragment toFragment = fm.findFragmentByTag(toTag);
18         //如果要切换到的Fragment不存在,则创建
19         if (toFragment == null) {
20             try {
21                 toFragment = toFragmentClass.newInstance();
22                 toFragment.setArguments(args);
23             } catch (java.lang.InstantiationException e) {
24                 e.printStackTrace();
25             } catch (IllegalAccessException e) {
26                 e.printStackTrace();
27             }
28         }
29         //如果有参数传递,
30         if( args != null && !args.isEmpty() ) {
31             toFragment.getArguments().putAll(args);
32         }
33         //Fragment事务
34         FragmentTransaction ft = fm.beginTransaction();
35         //设置Fragment切换效果
36         ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out,
37                 android.R.anim.fade_in, android.R.anim.fade_out);
38         /**
39          * 如果要切换到的Fragment没有被Fragment事务添加,则隐藏被切换的Fragment,添加要切换的Fragment
40          * 否则,则隐藏被切换的Fragment,显示要切换的Fragment
41          */
42         if( !toFragment.isAdded()) {
43             ft.hide(fromFragment).add(R.id.content_frame, toFragment, toTag);
44         } else {
45             ft.hide(fromFragment).show(toFragment);
46         }
47         //添加到返回堆栈
48 //        ft.addToBackStack(tag);
49         //不保留状态提交事务
50         ft.commitAllowingStateLoss();
51     }

这里有个FragmentTransaction(事务),这个是Fragment切换的核心类,它有两个方法:replace,add,一个是替换Fragment,一个是添加Fragment,两者的区别是:replace=remove掉旧fragment,add新的fragment,

当我们的应用(即管理多个Fragment的Activity)运行到后台时(即推出当前屏幕),会触发Activity的onPause()方法,而Activity的onPause()会调用它所管理的Fragment的同样的方法,但是当我使用replace时,已经remove掉了原来的Fragment,所以当调用原理的Fragment的onPause()方法就回不粗在,就会出现上述xxx is not currently in the FragmentManager的异常推出,有debug为证:

android的Fragment切换时怎保存状态,避免重复调用onCreateView()

在sdk sample的APIdemo 的FragmentHideShow.java

actionbar+Fragment 来回切换怎保持不了状态

生成了 2个 fragment 点击之后就替换 结果 来回切换后后 textview里的内容是随机的? 按理说 creat 就调用一次啊?求解答!

时间: 2024-08-25 00:01:12

Fragment保持状态切换,fragment状态切换的相关文章

Fragment保持状态切换

在使用Activity管理多个Fragment时,每次切换Fragment使用的是replace,结果导致出现xxx is not currently in the FragmentManager异常挂掉 网上说使用replace切换会使被切换的Fragment给替换掉,从而被被切换的Fragment的view从viewtree中删除,致使切换过程中每次都要重新创建Fragment 每次使用add添加Fragment,当再次切换到时用show显示,而被切换的Fragment用hide隐藏,具体代

FragmentTab切换Fragment时避免重复加载UI

原文地址:破晓博客 ? [原创]FragmentTab切换Fragment时避免重复加载UI 使用FragmentTa时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 测试于:Android2.3+ 解决办法:在Fragment onCreateView方法中缓存View private View rootView = null;// 缓存Fragment view @Override public

FragmentTabHost切换Fragment时避免重复加载UI

使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Fragment onCreateView方法中缓存View 1 private View rootView;//缓存Fragment view 2 3 @Override 4 public View onCreateView(LayoutInflater inflater, ViewGroup conta

解决 viewpager fragment 切换 Fragment被销毁的问题

当我们用FragmentViewPagerAdapter和ViewPager来完成滑动切换选项卡时,效果非常不错,但是后来遇到一个问题,FragmentA切换到FragmentB,再滑到FragmentC时,FragmentA的状态数据已经不予保存了,再次滑动到FragmentB时,FragmentA的oncreateView方法会重新调用,如果有网络请求,将会是非常蛋疼,在网上找了半天,最后看到viewpager中有个这样的方法setOffscreenPageLimit,设置为2,然后再一试,

【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transaction进行切换,很方便提供切换的效果. 利用setTransition() 在Pro Android学习笔记(三九):Fragment(4):基础小例子-续的“Step 4:实现showDetail(int index),如何管理fragment”中,介绍了如何在容器FrameLayout中通过frag

FragmentTabHost切换Fragment时避免重复加载UI,导致切换后重绘页面的问题解决

项目中用到了FragmentTabHost,痛苦的是切换Fragment时页面总是重新加载无法保证是切换前的状态,现在得以解决! 问题:使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Fragment onCreateView方法中缓存View @Override public View onCreateView(LayoutInflater infla

切换Fragment时实现数据保持

摘要 Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用.可以将Fragment看作是一个可以嵌入布局中的activity,有自己的生命周期. Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用.可以将Fragment看作是一个可以嵌入布局中的activity,有自己的生命周期.比如我现在在手机上有activityA和activityB,但是在平板上有更大的

Android之fragment点击切换和滑动切换结合

学了一小段时间的Android,主要接触的是UI设计,打交道最多莫过于fragment了吧.在Android3.0引入了fragment的概念后,几乎在所以的Android的应用中都可以看见其身影,已经有很多前辈高人都已经详细介绍过fragmrnt,我这里就不多说什么了. 这里本来是想模仿一下微信的切换效果,怎奈水平不足,这里就献丑贴出半成品的代码,希望有大神能指点一下.废话不多说,上代码.先从简单的开始吧,这里是我一共用了3个fragment,这里就只贴出第一个的fragment的布局,别的两

使用ViewPager切换Fragment时,防止频繁调用OnCreatView

使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPagerAdapter的源码,发现两个关键的地方 1 @Override 2 public Object instantiateItem(ViewGroup container, int position) { 3 if (mCurTransaction == null) { 4 mCurTransa