有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓x的java问题。偏爱安卓工作室

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

import 安卓x.appcompat.app.ActionBar;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.appcompat.app.AppCompatDelegate;
import 安卓x.preference.Preference;
import 安卓x.preference.PreferenceFragmentCompat;
import 安卓x.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;
            }
        });
    }
}

}

这是我的根_偏好。xml文件:

<PreferenceCategory
    app:title="General">

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

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

java.lang.ClassCastException: 安卓x.preference.SwitchPreferenceCompat cannot be cast to 安卓x.preference.SwitchPreference


共 (1) 个答案

  1. # 1 楼答案

    java.lang.ClassCastException: androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.SwitchPreference

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

    你应该设置SwitchPreference

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

    或使用

    SwitchPreferenceCompat darkModeSwitch = (SwitchPreferenceCompat) findPreference("darkmode");