java - java.lang.IllegalStateException:片段
问题描述
当我使用 targetSdkVersion 26 时,我的代码运行良好,现在我将 targetSdkVersion 更改为 28,所以现在我在某些 android 版本 8.0+ 的设备上遇到了这些崩溃我现在做什么......???
我已将 UrduSimplePreferenceFragment 从 protected 更改为 public,但仍然遇到相同的崩溃
e8.java
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager()
.beginTransaction()
.replace(android.R.id.content,
new UrduSimplePreferenceFragment()).commit();
mSharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
editor = mSharedPreferences.edit();
}
@SuppressLint("validFragment")
public class UrduSimplePreferenceFragment extends PreferenceFragment {
@SuppressLint("NewApi")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.z4);
Log.e("kk", "onCreate");
InterstitialAdmob();
getActionBar().setIcon(R.drawable.icon);
Preference pref = findPreference("changetheme");
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
themesDialog();
return true;
}
});
/*if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}*/
}
}
日志猫
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.multi.keyboard.khmer.keyboard.khmerlanguage/com.multi.keyboard.khmer.keyboard.khmerlanguage.e8}: java.lang.IllegalStateException: Fragment com.multi.keyboard.khmer.keyboard.khmerlanguage.e8.UrduSimplePreferenceFragment must be a public static class to be properly recreated from instance state.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.IllegalStateException: Fragment com.multi.keyboard.khmer.keyboard.khmerlanguage.e8.UrduSimplePreferenceFragment must be a public static class to be properly recreated from instance state.
at android.app.BackStackRecord.doAddOp(BackStackRecord.java:429)
at android.app.BackStackRecord.replace(BackStackRecord.java:470)
at android.app.BackStackRecord.replace(BackStackRecord.java:462)
at com.multi.keyboard.khmer.keyboard.khmerlanguage.e8.onCreate(e8.java:36)
at android.app.Activity.performCreate(Activity.java:7183)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1221)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
解决方案
UrduSimplePreferenceFragment must be a public static class to be properly recreated from instance state.
使 UrduSimplePreferenceFragment 成为公共静态类
public static class UrduSimplePreferenceFragment extends PreferenceFragment {
@SuppressLint("NewApi")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.z4);
Log.e("kk", "onCreate");
InterstitialAdmob();
getActionBar().setIcon(R.drawable.icon);
Preference pref = findPreference("changetheme");
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
themesDialog();
return true;
}
});
/*if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}*/
}
}
推荐阅读
- ios - 在 iOS 13.1 beta 上收到 Voip 推送通知时,活动电话会终止
- python - 如何在 pandas 数据框中跳过“Nan”值以及如何在每个图上显示带有 rsquared 的回归线
- excel - 如何在VBA中用变量行填充一列公式
- flex-lexer - “%option nodefault” 导致“flex 扫描仪卡住”
- python - 在 Python 中实现一个案例来执行特定的命令
- python - Python从列表列表中创建列表列表
- azure - Azure Func 或 Logic App 中的 OleDB 或 ODBC
- javascript - 来自具有嵌套条件的 JSON 数据的角度动态表单视图
- python - Tesseract:大写字符的问题
- django - django - 如何将上传的文件保存到指定名称的特定文件夹