androidx.preference.SwitchPreference Android Studio 的问题
Problem with androidx.preference.SwitchPreference Android Studio
好的,所以 - 我想在我的应用程序中添加首选项设置,用户可以在应用程序的深色和白色模式之间切换。问题是只有 Android 的教程,而 AndroidX 没有。我是应用程序制作的新手,我无法让它发挥作用。
这是我的 Java class:
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>
activity不是手工制作的,是AndroidStudio中的通用SettingsActivity。感谢您的帮助。
这是我收到的错误,由 setOnPreferenciesChangeListener()
:
java.lang.ClassCastException:
androidx.preference.SwitchPreferenceCompat cannot be cast to
androidx.preference.SwitchPreference
java.lang.ClassCastException:
androidx.preference.SwitchPreferenceCompat cannot be cast to
androidx.preference.SwitchPreference
ClassCastException
是在 Java 中引发的运行时异常,当我们尝试不正确地将 class 从一种类型转换为另一种类型时。
你应该设置SwitchPreference
<PreferenceCategory
app:title="General">
<SwitchPreference
app:key="darkmode"
app:title="Dark mode"/>
</PreferenceCategory>
或使用
SwitchPreferenceCompat darkModeSwitch = (SwitchPreferenceCompat) findPreference("darkmode");
好的,所以 - 我想在我的应用程序中添加首选项设置,用户可以在应用程序的深色和白色模式之间切换。问题是只有 Android 的教程,而 AndroidX 没有。我是应用程序制作的新手,我无法让它发挥作用。 这是我的 Java class:
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>
activity不是手工制作的,是AndroidStudio中的通用SettingsActivity。感谢您的帮助。
这是我收到的错误,由 setOnPreferenciesChangeListener()
:
java.lang.ClassCastException: androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.SwitchPreference
java.lang.ClassCastException: androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.SwitchPreference
ClassCastException
是在 Java 中引发的运行时异常,当我们尝试不正确地将 class 从一种类型转换为另一种类型时。
你应该设置SwitchPreference
<PreferenceCategory
app:title="General">
<SwitchPreference
app:key="darkmode"
app:title="Dark mode"/>
</PreferenceCategory>
或使用
SwitchPreferenceCompat darkModeSwitch = (SwitchPreferenceCompat) findPreference("darkmode");