Fragmentation
Fragmentation copied to clipboard
java.lang.IllegalAccessError: Field 'androidx.fragment.app.FragmentManager.mStateSaved' is inaccessible to class
Issues Guideline
Following information can help us to resolve the issue faster. java.lang.IllegalAccessError: Field 'androidx.fragment.app.FragmentManager.mStateSaved' is inaccessible to class 'androidx.fragment.app.FragmentationMagician' (declaration of 'androidx.fragment.app.FragmentationMagician' appears in /data/app/com.ytj.ivpn-zgzU8DPispqblDe0A9FZAw==/base.apk)
- Library version
- Support-v4 version
- Logs
- Screenshots
In addition, we do not accept issues unrelated to Fragmentation.
java.lang.IllegalAccessError: Field 'androidx.fragment.app.FragmentManager.mStateSaved' is inaccessible to class 'androidx.fragment.app.FragmentationMagician' (declaration of 'androidx.fragment.app.FragmentationMagician' appears in /data/app/com.ytj.ivpn-zgzU8DPispqblDe0A9FZAw==/base.apk)
想不明白为什么,突然这样了,啥也没改过
loadMultipleRootFragment(R.id.frameLayout,0,allFragment,successFragment,cancelFragment)
使用这个implementation 'me.yokeyword:fragmentation:1.3.7'依赖的代码
跟下载的代码不一样额。。。。
依赖 androidx.fragment:fragment:1.2.0+ 会有这个问题, 1.2.0版本之后将FragmentManager中的变量mStateSaved变为private,所有的逻辑从FragmentManagerImpl移到了FragmentManager。 可修改依赖版本为androidx.fragment:fragment:1.1.0解决这个问题,希望作者早日适配fragment1.2.0
可以引用源码,修改FragmentationMagician中的hookStateSaved方法如下: private static void hookStateSaved(FragmentManager fragmentManager, Runnable runnable) { if (!(fragmentManager instanceof FragmentManagerImpl)) return;
if (isStateSaved(fragmentManager)) {
try {
Log.d("lyx","通过反射获取私有属性mStateSaved");
Class<? extends FragmentManager> aClass = fragmentManager.getClass();
Field mStateSavedField = aClass.getDeclaredField("mStateSaved");
mStateSavedField.setAccessible(true);
Log.d("lyx","通过反射获取私有属性mStateSaved,并设置属性可访问");
Log.d("lyx","通过反射获取私有属性mStopped");
Field mStoppedField = aClass.getDeclaredField("mStopped");
mStoppedField.setAccessible(true);
Log.d("lyx","通过反射获取私有属性mStopped,并设置属性可访问");
boolean tempStateSaved = (boolean) mStateSavedField.get(fragmentManager);
boolean tempStopped = (boolean) mStoppedField.get(fragmentManager);
Log.d("lyx","设置私有属性mStateSaved == false");
Log.d("lyx","设置私有属性mStopped == false");
mStateSavedField.setBoolean(fragmentManager, false);
mStoppedField.setBoolean(fragmentManager, false);
runnable.run();
mStateSavedField.setBoolean(fragmentManager, tempStateSaved);
mStoppedField.setBoolean(fragmentManager, tempStopped);
Log.d("lyx","设置私有属性mStateSaved == "+tempStateSaved);
Log.d("lyx","设置私有属性mStopped == "+tempStopped);
} catch (Exception e) {
Log.e("lyx", "hookStateSaved: 发生异常,异常信息:"+e.getMessage());
e.printStackTrace();
}
} else {
runnable.run();
}
}
这是来自QQ邮箱的假期自动回复邮件。您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。