[英]onCheckedChangedListener gets fired but does not save data to SharedPreferences (Android)
我有一个设置页面,用户可以在其中选择应用程序中倒数计时器的时间。 它具有3个单选按钮,而我想发生的是,当用户单击其中的一个时,一个int值将保存为SharedPreferences,作为另一个活动中计时器的“时间”参数。
单选按钮的onCheckedChangedListener会被触发,但是时间值不会保存到SharedPrefs中。
这是我的设置活动的摘录:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.thirty:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
editor = prefs.edit();
editor.putInt("time", 30000).apply();
Toast.makeText(this, "h", Toast.LENGTH_SHORT).show();
break;
case R.id.fifty:
editor.putInt("time", 50000);
editor.apply();
break;
case R.id.ninety:
editor.putInt("time", 90000);
editor.apply();
break;
}
}
这是我(未成功)在另一个活动中检索数据的地方:
mprefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
time = mprefs.getInt("time", 50000);
cdTimer = new Timer(time, 1000);
另一件事是,当我为像这样的单选按钮设置onClickListener时,代替onCheckedChanged,一切正常
thirty = (RadioButton)findViewById(R.id.thirty);
thirty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs = PreferenceManager.getDefaultSharedPreferences(Options.this);
editor = prefs.edit();
editor.putInt("time", 30000).apply();
}
});
有人可以解释为什么会这样吗? 我对android编程非常陌生,因此请您多加解释。 谢谢。
最好调用 editor.commit();
在您的 editor.putInt
commit()
同步写入数据(阻塞从其调用的线程)。 然后它会通知您有关操作成功的信息。
apply()
计划将数据异步写入。 它不会通知您有关操作成功的信息。
您只能在第一个switch语句中初始化您的编辑器,而在其他两个语句中不初始化。 如果您是我,则可以在点击侦听器之外对其进行初始化,那么它将可以在任何地方使用。
case R.id.thirty:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
editor = prefs.edit();
editor.putInt("time", 30000).apply();
Toast.makeText(this, "h", Toast.LENGTH_SHORT).show();
break;
首先,您需要将if (isChecked)
添加到onCheckedChanged
函数中。 另外,prefs的初始化也想退出开关,因此您的函数将如下所示:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
prefs = PreferenceManager.getDefaultSharedPreferences(this);
switch (buttonView.getId()) {
....
}
}
}
问题在于其他onCheckedChanged
按钮的onCheckedChanged
可能会覆盖首选项中的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.