【问题标题】:Cannot resolve method 'setchecked(boolean)' Shared Preferences无法解析方法“setchecked(boolean)”共享首选项
【发布时间】:2019-04-28 15:27:39
【问题描述】:

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

【问题讨论】:

  • 每当您遇到运行时错误时,请务必在您的帖子中包含来自 logcat 的错误堆栈。此外,请务必在发布方法时包含整个方法。第一个代码段不显示方法头。最后一个代码段没有最后的括号。这个信息很重要。另外,请尝试格式化您的代码。
  • 只是代码中 ischecked(true) 或 ischecked(false) 为红色的地方。 ischecked 的打印是红色的,仅此而已..想知道它是否是导入的?

标签: java android boolean


【解决方案1】:

试试这样的方法:

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);
}



说明
此代码使用ToggleButton 对象上的匿名方法setOnCheckedChangeListener() 来监听onCheckedChanged() 事件。这意味着您不需要 XML 布局文件中的 onClick 属性——请删除它!

我已将toggleButton 对象设为类属性。这使得它可以在整个班级中访问。我还将setChecked() 移动到onResume() 覆盖方法,以确保在您离开然后返回Activity 时正确设置。


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


对用于引用任何可重用“名称”的任何值(如SharedPreferences 中使用的)使用常量值(java -> static final)是一种很好的做法。这样他们就不会拼写错误,从而给出错误的返回值。

【讨论】:

  • 感谢没有编译错误!!你帮我解决了我真的很感激..有什么办法可以通过单击另一个按钮来加载切换按钮?
【解决方案2】:

谢谢,原来只是 .xml 和不同构造的视图选择和名称和子文件的静态参数设置!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多