java.lang.IllegalArgumentException
页面中使用了Fragment嵌套的展现形式,会有一个偶现的问题,在手机将应用最小化后一顿时间,再进入应用,可能会出现以上错误。初步判断是因为 FragmentActivity.getSupportFragmentMananger()导致
查看FragmentActivity代码,发现方法:
<span style="font-size:12px;"> * Return the FragmentManager for interacting with fragments associated
* with this activity.
*/
public FragmentManager getSupportFragmentManager() {
return mFragments.getSupportFragmentManager();
}</span>
此方法返回一个activity中的FragmentManager
查阅Fragment代码,发现方法 getChildFragmentManager()
<span style="font-size:12px;"> /**
* Return a private FragmentManager for placing and managing Fragments
* inside of this Fragment.
*/
final public FragmentManager getChildFragmentManager() {
if (mChildFragmentManager == null) {
instantiateChildFragmentManager();
if (mState >= RESUMED) {
mChildFragmentManager.dispatchResume();
} else if (mState >= STARTED) {
mChildFragmentManager.dispatchStart();
} else if (mState >= ACTIVITY_CREATED) {
mChildFragmentManager.dispatchActivityCreated();
} else if (mState >= CREATED) {
mChildFragmentManager.dispatchCreate();
}
}
return mChildFragmentManager;
}</span>
根据注释,可以得知, getChildFragmentManager()是 在Fragment嵌套的情况下,获取FragmentMnanger使用的方法。
将代码中的FragmentActivity.getSupportFragmentManager() 替换为 getChildFragmentManger(),则异常解除
总结: 在FragmentActivity中获取FragmentManager时,使用FragmentActivity.getSupportFragmentManager() 或 FragmentActivity.getFragmentManager():
在Framgent中获取管理子Fragment的FragmentManager时,使用 getChildFragmentManger()