java - 无法解析方法“setchecked(boolean)”共享首选项
问题描述
嘿唯一的错误发生在这里。由于我使用的是 android:onClick 方法,因此我尝试将代码放入其他部分,但是在突出显示 button.setChecked(true); 时,它的错误完全相同。有人有解决方案吗?可能是导入错误或需要复选框?不知道为什么它不会被检查。|| 更新:它只是读取ischecked的地方,它不允许我编译,因为当我滚动过去时它会读取“无法解析方法“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();
解决方案
尝试这样的事情:
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()
事件。这意味着您不需要onClick
XML 布局文件中的属性——请删除它!
我已将该toggleButton
对象设为类属性。这使得它可以在整个班级中访问。我还转向setChecked()
了onResume()
override 方法,以确保在您离开然后返回到Activity
.
我已更改editor.apply()
为editor.commit()
. 我不知道你有多少个特定实例的值SharedPreferences
,但通常你应该commit()
尽可能使用,因为commit()
它是异步的并且不会阻塞线程——在这种情况下是主 UI 线程。
对任何用于引用任何可重用“名称”的值(如SharedPreferences
. 这样他们就不会拼写错误,从而给出错误的返回值。
推荐阅读
- laravel - Laravel Cashier Paddle - 试用天数错误
- security - 避免金融网站dos攻击的最推荐解决方案是什么?
- c++ - 如何将 protobuf 动态消息转换为 C++ 中声明的消息?
- python - django mongodb 使用 djongo 和 pymongo 连接
- maven - 在 spark 类路径中为 mmlspark 添加 jar
- c - 对 _imp__recv@16' 的未定义引用
- c++ - 标头中声明的函数可以在一个项目中的不同源文件中具有多个定义吗?
- java - Eclipse 在哪里管理工作区信息?
- python - Python\KivyMd 自定义 MDDialog 中的空格
- shell - 使用 wkhtmltopdf 拉取单个页面