嘿,唯一的错误在这里发生。由于我使用的是android:onClick方法,因此我尝试将代码放入其他部分,但是当高亮显示button.setChecked(true);时,它的错误完全相同。有人有解决方案吗?也许需要导入错误或复选框?不确定为什么不会读取。 ||更新:它的读取位置已被检查,它不允许我编译,因为当我滚动通过它时,它会读取“无法解析方法“ ischecked(boolean)”,并以红色打印
button = (ToggleButton) findViewById(R.id.toggleButton);
SharedPreferences preferences = getSharedPreferences("SharedPreferences", MODE_PRIVATE);
boolean flag = preferences.getBoolean("button1", false);
if (flag) {
button.clearCheck();
button.setChecked(true);
} else {
button.setChecked(false);
}
}
public void D1(View view)
{
boolean checked = ((ToggleButton)view).isChecked();
if(checked) {
SharedPreferences.Editor editor = getSharedPreferences("SharedPreferences", MODE_PRIVATE).edit();
editor.putBoolean("button1", true);
editor.apply();
soundPool.play(sound1, 1, 1, 0, 0, 1);
}
else {
SharedPreferences.Editor editor = getSharedPreferences("button1", MODE_PRIVATE).edit();
editor.putBoolean("button1", false);
editor.apply();
答案 0 :(得分:0)
尝试这样的方法:
private static final String MY_SHARED_PREFERENCES = "SharedPreferences";
private static final String MY_BUTTON_PREF = "button1";
private SharedPreferences preferences;
private ToggleButton toggleButton;
@Override
protected void onCreate(Bundle, savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity);
preferences = getSharedPreferences(MY_SHARED_PREFERENCES, MODE_PRIVATE);
toggleButton = findViewById(R.id.toggleButton);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(MY_BUTTON_PREF, isChecked);
editor.commit();
if(isChecked){
soundPool.play(sound1, 1, 1, 0, 0, 1);
}
}
});
}
@Override
public void onResume(){
super.onResume();
boolean flag = preferences.getBoolean(MY_BUTTON_PREF, false);
toggleButton.setChecked(flag);
}
说明:
此代码在setOnCheckedChangeListener()
对象上使用匿名方法ToggleButton
来监听onCheckedChanged()
事件。这意味着您不需要XML布局文件中的onClick
属性-请删除该属性!
我已将toggleButton
对象设为类属性。这使得整个课程都可以访问它。我也将setChecked()
移到了onResume()
覆盖方法中,以确保在离开后返回Activity
时已正确设置。
我已将editor.apply()
更改为editor.commit()
。我不知道您有一个特定的SharedPreferences
实例有多少个值,但是通常应该尽可能使用commit()
,因为commit()
是异步的并且不会阻塞线程-在这种情况下主UI线程。
优良作法是对用于引用任何可重用“名称”的任何值使用常数值(java->静态最终值),例如在SharedPreferences
中使用。这样,它们将不会被拼写错误,从而提供错误的返回值。
答案 1 :(得分:0)
谢谢,事实证明这只是.xml和结构不同的视图选择以及为名称和子文件设置静态参数!