Проблема с androidx.preference.SwitchPreference Andorid Studio - PullRequest
1 голос
/ 27 апреля 2020

Итак, я хочу добавить настройки предпочтений в свое приложение, в которых пользователь может переключаться между темным и белым режимом приложения. Проблема в том, что есть только учебники для 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 file:

<PreferenceCategory
    app:title="General">

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

Действие не выполняется вручную, это общие настройки действий в Android Studio. Любая помощь приветствуется. Это ошибка, которую я получаю, вызванная в setOnPreferenciesChangeListener:

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

1 Ответ

1 голос
/ 27 апреля 2020

java .lang.ClassCastException: androidx.preference.SwitchPreferenceCompat нельзя преобразовать в androidx.preference.SwitchPreference

ClassCastException - исключение во время выполнения повышается в Java, когда мы пытаемся неправильно привести класс из одного типа в другой.

Вы должны установить SwitchPreference

 <PreferenceCategory
        app:title="General">

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

Или использовать

SwitchPreferenceCompat darkModeSwitch = (SwitchPreferenceCompat) findPreference("darkmode");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...