Java androidx.preference.SwitchPreference Android Studio存在问题

Java androidx.preference.SwitchPreference Android Studio存在问题,java,android,switch-statement,androidx,preferences,Java,Android,Switch Statement,Androidx,Preferences,好的,那么-我想在我的应用程序中添加偏好设置,用户可以在应用程序的黑白模式之间切换。问题是Android只有教程,AndroidX没有。我是应用程序制作新手,我无法让它工作。 这是我的Java类: import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; import andro

好的,那么-我想在我的应用程序中添加偏好设置,用户可以在应用程序的黑白模式之间切换。问题是Android只有教程,AndroidX没有。我是应用程序制作新手,我无法让它工作。 这是我的Java类:

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SwitchPreference;

public class SettingsActivity extends AppCompatActivity {
    private SwitchPreference darkModeSwitch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_activity);
    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.settings, new SettingsFragment())
            .commit();
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);

    }
}

public static class SettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey);
        SwitchPreference darkModeSwitch = (SwitchPreference) findPreference("darkmode");
        assert darkModeSwitch != null;
        darkModeSwitch.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                } else {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                }
                return false;
            }
        });
    }
}
}

这是我的root_preferences.xml文件:

<PreferenceCategory
    app:title="General">

    <SwitchPreferenceCompat
        app:key="darkmode"
        app:title="Dark mode"/>
</PreferenceCategory>


该活动不是手动创建的,而是Android Studio中的常规设置活动。感谢您的帮助。 这是我收到的错误,由
setOnPreferenceChangeListener()引起。

java.lang.ClassCastException: 无法将androidx.preference.SwitchPreferenceCompat强制转换为 androidx.preference.SwitchPreference

java.lang.ClassCastException: 无法将androidx.preference.SwitchPreferenceCompat强制转换为 androidx.preference.SwitchPreference

ClassCastException
是在Java中,当我们试图将一个类从一种类型不正确地强制转换为另一种类型时引发的运行时异常

您应该设置
开关首选项

 <PreferenceCategory
        app:title="General">

        <SwitchPreference
            app:key="darkmode"
            app:title="Dark mode"/>
    </PreferenceCategory>

谢谢成功了!新问题-当应用黑暗模式时,应用程序冻结,没有任何内容可点击。
新问题-当应用黑暗模式时,应用程序冻结,没有任何内容可点击
您可以创建一个新问题(添加带有问题的logcat)。ª?这是我的新问题,如果您能提供帮助,我将非常高兴!
SwitchPreferenceCompat darkModeSwitch = (SwitchPreferenceCompat) findPreference("darkmode");