无法解析方法“ setchecked(boolean)”的共享首选项

时间:2018-11-26 22:56:25

标签: java android boolean

嘿,唯一的错误在这里发生。由于我使用的是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();

2 个答案:

答案 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和结构不同的视图选择以及为名称和子文件设置静态参数!