在首选项片段中解组时找不到类



我尝试实现可直接从设置中更改的日/夜系统。我为此使用了PreferenceFragmentCompat,但是,当我按下开关首选项以更改模式时。我有以下错误:

E/Parcel: Class not found when unmarshalling: androidx.fragment.app.FragmentManagerState
java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
Caused by: java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我到处找,但我真的不明白错误来自哪里。


这是我的偏好活动:

public class PreferencesActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
if (savedInstanceState == null)
getSupportFragmentManager().beginTransaction().replace(R.id.preferences_container, new PreferencesFragment()).commit();
}

@Override
protected void onDestroy() {
super.onDestroy();
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.contains(getString(R.string.KEY_PREF_NIGHT_MODE)))
AppCompatDelegate.setDefaultNightMode(sharedPreferences.getBoolean(key, false)? AppCompatDelegate.MODE_NIGHT_YES: AppCompatDelegate.MODE_NIGHT_NO);
}

public static class PreferencesFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
}

我使用这个布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/noteRecyclerBackground"
tools:context=".PreferencesActivity">
<FrameLayout
android:id="@+id/preferences_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
</LinearLayout>

没有崩溃,但有一个错误,这是当活动重新启动时与 AppCompatDelegate.setDefaultNightMode(sharedPreferences.getBoolean(key, false(?AppCompatDelegate.MODE_NIGHT_YES:AppCompatDelegate.MODE_NIGHT_NO(;

好吧,根据文档,这听起来像是预期的行为。

如果在"创建"附加了 AppCompatDelegates 的任何主机组件后调用此方法,则每个组件中都会发生 uiMode 配置更改。这可能会导致重新创建这些组件,具体取决于其清单配置

最新更新