问题描述
我目前正在开发一个 Android 应用程序,为此我创建了一个设置活动。我使用了共享首选项,但它没有按预期工作。我打开设置页面,切换开关,从内存中删除应用程序,但是当我再次打开它时,会显示默认设置。我不知道为什么。请帮忙。另外,我是初学者,因为我最近才开始编码,所以如果我犯了一个愚蠢的错误,请原谅我。
public class SettingsActivity extends AppCompatActivity {
public static final String SETTINGS_PREFERENCES = "com.example.taskmasterv3.SettingsPreferences";
Switch switchReminder,switchNotifications;
boolean reminders;
boolean notifications;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
switchReminder = findViewById(R.id.switchReminder);
switchNotifications = findViewById(R.id.switchNotifications);
SharedPreferences prefs = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE);
boolean reminder = prefs.getBoolean("reminders",true );
boolean notification = prefs.getBoolean("notifications",false);
switchReminder.setChecked(reminder);
switchNotifications.setChecked(notification);
if (switchReminder.isChecked())
{
reminders = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE).edit();
editor.putBoolean("reminders",reminders);
editor.apply();
}
if (switchNotifications.isChecked())
{
notifications = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE).edit();
editor.putBoolean("notifications",notifications);
editor.apply();
}
}
}
解决方法
我知道你哪里出错了。您实际上无法设置该数据。
if (switchReminder.isChecked())
{
reminders = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE).edit();
editor.putBoolean("reminders",reminders);
editor.apply();
}
if (switchNotifications.isChecked())
{
notifications = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE).edit();
editor.putBoolean("notifications",notifications);
editor.apply();
}
它在您启动活动时直接调用。但是,这个函数不会调用改变开关的状态。
因此,您必须添加如下源代码的侦听器。
switchReminder.setOnClickListener(new View.OnClickListener() {
//enter your code here
if (switchReminder.isChecked())
{
reminders = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE).edit();
editor.putBoolean("reminders",reminders);
editor.apply();
}
})
还要在 setOnClickListener()
上添加 switchNotifications
。比,我希望它会奏效。
编辑:
//setOnClickListener
switchReminder.setOnClickListener(new View.OnClickListener() {
if (switchReminder.isChecked())
{
reminders = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,reminders);
editor.apply();
}
})
那只是为了switchRemider
。并且,以下源代码适用于 switchNotification
。
//setOnClickListener
switchNotifications.setOnClickListener(new View.OnClickListener() {
if (switchNotifications.isChecked())
{
notifications = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,notifications);
editor.apply();
}
})
您已添加两个代码而不是
if (switchReminder.isChecked())
{
reminders = true;
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,notifications);
editor.apply();
}
,
好的,所以我终于让它起作用了。我刚刚添加了一个保存按钮来保存我的设置。现在它就像一个魅力。这是代码:
public static final String SETTINGS_PREFERENCES = "com.example.taskmasterv3.SettingsPreferences";
SwitchCompat switchReminder,switchNotifications;
Button btnSaveSettings;
boolean remind;
boolean notify;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
switchReminder = findViewById(R.id.switchReminder);
switchNotifications = findViewById(R.id.switchNotifications);
btnSaveSettings = findViewById(R.id.btnSaveSettings);
SharedPreferences preferences = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE);
boolean reminder = preferences.getBoolean("remind",true);
boolean notification = preferences.getBoolean("notify",false);
if (reminder)
{
switchReminder.setChecked(true);
}
if (notification)
{
switchNotifications.setChecked(true);
}
btnSaveSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
if (switchReminder.isChecked())
{
remind = true;
}
else
{
remind = false;
}
if (switchNotifications.isChecked())
{
notify = true;
}
else
{
notify = false;
}
SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_PREFERENCES,MODE_PRIVATE).edit();
editor.putBoolean("remind",remind);
editor.putBoolean("notify",notify);
editor.commit();
}
});
}
}