java.lang.IllegalStateException: Fragment already added:

Fragment 相关API

getSupportFragmentManager().popBackStack()

getFragmentManager().getBackStackEntryCount 其是操作谁的,当一个activity初次显示的时候,其是0还是1.

Fragment 具体有几个stack, 前端界面显示stack, 和后端缓存的stack

backStack 其属于哪一个stack

Activity, fragment, stack 其之间的关联是什么

FragmentManager的作用

1. 代activity管理所有fragment行为操作. 反过来推论:要想以于Fragment与activity发生关联,就必须通过fragmentManager

2. 具体操作: 对于activity当中所有fragment进行删改查

3.fragmentManger:以stack这种数据结构来管理所有Fragment.为什么要用stack.界面的切换一般均要stack的方式进行的。如进入返回

activity当中有几种类型的fragment呢。这几种类型之间的关联。相关的操作API是什么。

1. 一个activity可以同时显示多个fragment, 这是也就是有些操作,不方便统一实现 ,如Fragment来直接处理backpress, activity并不能直接知道当中前哪些Fragment是可视的,或者唯一可视的。

4. 查:findFragmentById()或findFragmentByTag() 是用来查找activity当中的fragment, 要查找的时候,就可以使用这个方法。

其在哪里面查找: 应该是backstack当中。推论: 每一个activity其只是是backstack. 当前fragment在backstack当中没有

5.删除: 删除哪个,为什么会要删除, 删除:回退删除,指定删除

popBackStack(): 回退删除,注意此方法为异步方法,其只是就请求发送到消息队列当中,当这个动作直到应用回到事件循环当中才执行。注意:如果此时队列当中还有对于fragment操作,可能会引起异常,我就遇到了java.lang.IllegalStateException: Fragment already added。 程序当中的具体业务在对于fragment进行操作的时候,要添加判断。

6. 增: add, remove, show,hide 其之间的相同点,不同点,各自的应用场景

且注意:与addToBackStack之间的关联,如add 与addToBackStack

如: 当前为A fragment 需要切换到B fragment

相同点: 均是将B对于activity当中

不同点: 对于A的处理

对于:add方式

1. 当前fragment

2. fragment popbackstack 与backkey

getSupportFragmentManager().

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

ft.add()

ft.addToBackStack(null): 为什么是传入null

ft.commit()

manager.popBackStackImmediate()

1. popBackStack 与addToBackStack一定要匹配使用,

注意:当在切换fragment的时候,没有将之前的fragment加入到backStack,那调用popBackStack就不会有作用,界面效果就是没有切换。

2. replace与addToBackStack 和add与addToBackStack之间区别

相同点:

不同点:

After replacing Fragment, Activity still detects Fragment is visible

http://blog.csdn.net/mobilexu/article/details/11711865

http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html

http://so.csdn.net/so/search/s.do?ref=toolbar&q=fragment+%E5%88%86%E6%9E%90&ref=toolbar&q=fragment+%E5%88%86%E6%9E%90

http://blog.csdn.net/liu470368500/article/details/38145601

时间: 2024-11-10 14:00:14

java.lang.IllegalStateException: Fragment already added:的相关文章

java.lang.IllegalStateException: Fragment bb{42261900} not attached to Activity

A.处理异常java.lang.IllegalStateException: Fragment bb{42261900} not attached to Activity处理方式:由于在线程中调用Fragment以下方法会出现fragment已经没有附加到activity, 所以在调用这些方法时候加isAdded()判断Fragment源码 --------------------1----------------------------- public final Resources getR

java.lang.IllegalStateException:Fragment XXXFragment{409864b0} not attached to Activity

现象: 这类bug产生的现象就是在Fragment还没添加到Activity中时,去调用了Fragment的getResources().getString(R.string.xxx)这样的函数. 原因: Fragment被添加到Activity之前,如果去调用了Fragment的某些函数就会导致这个异常出现. 解决方案: 在出现问题的地方加入Fragment是否添加到Activity的判断: if(Fragment.isAdded()) { text = getResources().getS

Fragment java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

首先描述下所要实现的功能点: MainActivity使用Fragment实现底部菜单,底部共有四个菜单按钮,分别对应:AFragment,BFragment,CFragment,DFragment.其中AFragment是默认显示. 点击CFragment中的一个button后跳转到第二个Activity界面:SecondActivity. SecondActivity返回键有两个:button01.button02.其中button01返回的是CFragment:button02返回的是AF

Java.lang.IllegalStateException Activity has been destroyed

03-04 12:01:05.468: E/AndroidRuntime(2474): FATAL EXCEPTION: main03-04 12:01:05.468: E/AndroidRuntime(2474): java.lang.IllegalStateException: Activity has been destroyed03-04 12:01:05.468: E/AndroidRuntime(2474):     at android.support.v4.app.Fragmen

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState问题解决

(1)我用的是fragment,在onStop但是没有onDestroy的情况下切换(replace)fragment时报 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState错误,出现问题原因,在于我使用了FragmentTransaction.commit,解决办法:使用FragmentTransaction.commitAllowingStateLoss就不会报错了 (2

Android开发:java.lang.IllegalStateException报错

常见于ListView列表刷新数据时,更改UI. LOG: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. DDMS中的log无法定位到准确的出错位置.检查错误可

java.lang.IllegalStateException: attempt to re-open an already-closed object

最后,我还是通过单例模式和"短时间内不关闭SQLiteDatabase"解决了问题. 在自定义的DbHelper类(大部分人定义为DatabaseHelper)中: public static synchronized DbHelper getInstance(Context context){ if(dbInstance == null){ dbInstance = new DbHelper(context.getApplicationContext()); } return dbI

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

1. 场景: 在开发过程中遇到这么一个需要,在主页点击按钮进入另一个Activity(ReadActivity),在该ReadActivity中点击一个按钮再返回主页并指定主页选中特定的Tab.主页是用FragmentTabHost + Fragment 实现.思路是通过startActivityForResult以及setResult() 以及requestCode作为标志位,是ReadActivity返回,因为还有其他的requestCode.再通过 FragmentTabHost的setC

bug java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

在有Fragment的Activity中开启Activity出现下面这个Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceStateat android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)at android.support.v4.app.Frag