在PreferenceFragment中解组时找不到类

问题描述 投票:0回答:1

我尝试实现可直接从设置更改的日/夜系统。我为此使用了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>
java android android-activity fragment preferences
1个回答
0
投票
<<

嗯,per the documentation,这听起来像是预期的行为。

如果在“所有”带有附加AppCompatDelegates的主机组件创建之后调用此方法,则每个组件都会发生uiMode配置更改。

这可能会导致重新创建这些组件,具体取决于它们的清单配置

© www.soinside.com 2019 - 2024. All rights reserved.