在fragment中向另一个fragment传递数据时java.lang.IllegalStateException: Fragment already active
来源:互联网 发布:闪电精灵seo 编辑:程序博客网 时间:2024/05/29 16:25
一般对fragment传递数据都会想到用setArguments(Bundle data)方法,不过是在activity还是在fragment中传递。
但是如果你在fragment调用setArgument方法时,eclipse会抛出java.lang.IllegalStateException: Fragment already active异常。
想想也知道,在一个framgent钟调用setArguments方法设置数据,不是自己给自己设置吗?所以会报错。
看到网上有人说用setter和getter方法,没太明白也没去深究,我觉得应该有一种简单粗暴的方法。。
后来查了一些资料,假设你要传递数据给它的那个目标Fragment名字是a,那么调用a.setArguments就可以了,不要在fragment里面直接调用setArguments。
另外,在上一篇blog中说到嵌套使用fragment的问题
- List<Fragment> fragments = getParentFragment()
- .getFragmentManager().getFragments();
- Fragment faqFragment = FragmentFactory.getInstance()
- .newFragment("cn.hzgames.tvpartner.faq");
- // getParentFragment() ,important
- FragmentTransaction ft = getParentFragment()
- .getFragmentManager().beginTransaction();
- ft.setCustomAnimations(R.anim.slide_in_right,
- R.anim.slide_out_left);
- ft.add(R.id.root_fragment, faqFragment);
- ft.hide(fragments.get(fragments.size() - 1));
- ft.show(faqFragment);
上面那个list中的数据和在
- getParentFragment()
- .getFragmentManager()
里面的真实数据是相反的。
fragemeng也是用栈来存放顺序,从栈取数据放到list中的顺序应该是取栈顶的数据,然后放在list中的第一个。
在前者中取数据的顺序是从后往前,而在list中放数据的顺序是从前往后。
而我们知道,当前显示在屏幕上的那个fragment的位置应该是在前者的最后一个,因为前者存放fragment的顺序肯定是显示一个然后压栈,当fragment被新的fragment覆盖时,新的fragment被置于栈顶,旧的fragment被覆盖,所以被隐藏。
一句话,显示的那个fragment总是位于那个栈的栈顶的,所以我们如果想要正确的显示和隐藏fragment来达到替换显示fragment的效果的话,应该用下面的语句:
// getParentFragment() ,importantList<Fragment> fragments = getParentFragment().getFragmentManager().getFragments();// getParentFragment() ,importantFragmentTransaction ft = getParentFragment().getFragmentManager().beginTransaction();ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);ft.add(R.id.root_fragment, fragment);ft.hide(fragments.get(0));ft.show(fragment);ft.addToBackStack(null);ft.commit();
0 0
- 在fragment中向另一个fragment传递数据时java.lang.IllegalStateException: Fragment already active
- 使用Fragment时出现 java.lang.IllegalStateException: Fragment already active
- java.lang.IllegalStateException: Fragment already active
- java.lang.IllegalStateException: Fragment already active
- 异常:java.lang.IllegalStateException: Fragment already active
- java.lang.IllegalStateException: Fragment already active
- 异常:java.lang.IllegalStateException: Fragment already active
- java.lang.IllegalStateException: Fragment already active,Fragment.setArguments()问题
- Android运行异常二:java.lang.IllegalStateException: Fragment already active
- 解析 IllegalStateException--"Fragment already active"
- java.lang.IllegalStateException: Fragment already added问题
- java.lang.IllegalStateException: Fragment already added:
- java.lang.IllegalStateException: Fragment already added:
- Fragment中再嵌套Fragment(java.lang.IllegalStateException: FragmentManager is already executing transact)
- java.lang.IllegalStateException: Fragment already added异常的处理
- 关于java.lang.IllegalStateException: Fragment already added的一些问题
- java.lang.IllegalStateException: Fragment already added ListFragment异常的处理
- 关于java.lang.IllegalStateException: Fragment already added的问题
- python创建cocos2d-x出现list index out of range的问题解决方法
- qmake手册——变量CONFIG(未完待续)
- HashMap
- 安博实训总结
- Eclipse环境下格式化Android的代码风格
- 在fragment中向另一个fragment传递数据时java.lang.IllegalStateException: Fragment already active
- Deep Learning源代码收集-持续更新…
- Web开发者必备的20款超赞jQuery插件
- 使用Jersey构建rest接口
- Linux Vi 命令
- Linklist O(nlogn) sort
- 关于自增运算符和java的中间缓存变量机制
- 开启我的新篇章-ruby学习记录
- Git 常用命令