首页 > 解决方案 > 无法解析方法“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();

标签: javaandroidboolean

解决方案


尝试这样的事情:

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()事件。这意味着您不需要onClickXML 布局文件中的属性——请删除它!

我已将该toggleButton对象设为类属性。这使得它可以在整个班级中访问。我还转向setChecked()onResume()override 方法,以确保在您离开然后返回到Activity.


我已更改editor.apply()editor.commit(). 我不知道你有多少个特定实例的值SharedPreferences,但通常你应该commit()尽可能使用,因为commit()它是异步的并且不会阻塞线程——在这种情况下是主 UI 线程。


对任何用于引用任何可重用“名称”的值(如SharedPreferences. 这样他们就不会拼写错误,从而给出错误的返回值。


推荐阅读