首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >androidx.preference.SwitchPreference Android的问题

androidx.preference.SwitchPreference Android的问题
EN

Stack Overflow用户
提问于 2020-04-27 14:23:32
回答 1查看 667关注 0票数 1

好的,我想在我的应用程序中添加首选项设置,用户可以在应用程序的黑白模式之间切换。问题是,只有安卓的教程,而AndroidX则没有。我是应用程序开发的新手,我不能让它工作。以下是我的Java类:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
<PreferenceCategory
    app:title="General">

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

这个活动不是手工制作的,它是Android中的通用SettingsActivity。每一个帮助都是值得感激的。这是我在setOnPreferenciesChangeListener()中接收到的错误

androidx.preference.SwitchPreference

java.lang.ClassCastException:不能将androidx.preference.SwitchPreferenceCompat转换为androidx.preference.SwitchPreferenceCompat

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 14:32:19

java.lang.ClassCastException:不能将androidx.preference.SwitchPreferenceCompat转换为androidx.preference.SwitchPreference

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

您应该设置SwitchPreference

代码语言:javascript
复制
 <PreferenceCategory
        app:title="General">

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

或使用

代码语言:javascript
复制
SwitchPreferenceCompat darkModeSwitch = (SwitchPreferenceCompat) findPreference("darkmode");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61461069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档