如何初始化选项菜单复选框

3
我有一个带有复选框的选项菜单。当用户点击它时,我可以勾选和取消复选框,这很好。然而,我正在使用SharedPreferences来存储此复选框的值,因此我还需要使用SharedPreferences中存储的内容初始化复选框,即如果pref为true/false,则将复选框设置为已选/未选。
我想我需要在我的onCreateOptionsMenu中放一些代码,并且显然需要使用.setChecked(preference)来设置复选框,但是如何以编程方式引用复选框本身呢?
该菜单是使用以下方式创建的:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}

复选框可以使用以下方式进行勾选/取消勾选:
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.two_week:
            if (item.isChecked()) {
                item.setChecked(false);
            }
            else {
                item.setChecked(true);
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
     }
}
1个回答

10

我认为你缺少的唯一方法是菜单(Menu)的findItem()。你可以像这样轻松加载任何SharedPreferences(这里称为prefs):

SharedPreferences prefs;
...

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    boolean checked = prefs.getBoolean("two weeks", false);
    menu.findItem(R.id.two_week).setChecked(checked);
    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接