如何将共享首选项应用于复选框

How to apply shared preference to checkbox

我是 android 开发新手 我创建了一个复选框以及如何保存 check/uncheck 使用共享首选项

final Button add = (Button) findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                addNewBubble();
                add.setEnabled(false);
            }
        });

        CheckBox checkBox = (CheckBox)findViewById(R.id.add_fb);
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                isCheckedValue = isChecked;

            }
        });

    }


private void addNewBubble() {
        BubbleLayout bubbleView = (BubbleLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.bubble_layout, null);
        bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() {
            @Override
            public void onBubbleRemoved(BubbleLayout bubble) {
                finish();
                System.exit(0);



            }
        });
        bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() {

            @Override
            public void onBubbleClick(BubbleLayout bubble) {
                Intent in = new Intent(MainActivity.this, PopUpWindow.class);
                in.putExtra("yourBoolName", isCheckedValue );
                startActivity(in);

            }
        });
        bubbleView.setShouldStickToWall(true);
        bubblesManager.addBubble(bubbleView, 60, 20);
    }

此代码中有两个复选框 addadd_fb 我想让应用记住复选框是选中还是未选中

当您点击复选框时点击确定按钮

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("myActivity", 0);
    editor.commit();

当您启动您的应用程序时,请像这样检查..

int result;
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    result = sharedPreferences.getInt("showActivity", -1);
    if(result == 0)
      // do not show the activity.. start the next activity
final String FILE_NAME = "com.myproject.prefs";
final Boolean ADD = "add";
final Boolean ADD_FB = "add_fb";

// prefs file..
SharedPreferences prefs = getSharedPreferences(FILE_NAME, Activity.PRIVATE);
SharedPreferences.Editor editor = prefs.edit();

// by default both will be unchecked..
checkBoxAdd.setChecked(prefs.getBoolean(ADD, false);
checkBoxAddFb.setChecked(prefs.getBoolean(ADD_FB, false);

// now on checkedchancedEvent update the preferences
checkBoxAdd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

         editor.putBoolean(ADD, isChecked);
         editor.apply();


        }
    });

// similary the second one...
checkBoxAddFb.setOnCheckedChangeListener(new 
CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

         editor.putBoolean(ADD_FB, isChecked);
         editor.apply();


        }
    });

已更新

  • 这里我们将首选项存储在名称为 "com.myproject.prefs" 的文件中。我们需要存储两个布尔数据类型的偏好值(一个是添加,另一个是add_fb,如Q中给出的)。
  • 现在获取 SharePreferences 及其编辑器对象。
  • 根据存储的首选项设置复选框的值,如果之前未添加首选项,则将这些设置为 false。因此,当您第一次 运行 您的应用时,这些将获得 false 值,因为之前没有添加任何值。
  • 只要你想得到这些偏好值
    pass your preferences file_name and mode to getSharedPreferences();
    // then use those objects to get any specific value like
    prefs.getBoolean(your_value_name, default_value); 上面已经提到了

  • 只要您想更改这些首选项值,请使用 SharedPreferences.Editor 对象。将您的价值名称及其新价值传递给 putBoolean()
    喜欢
    editor.putBoolean(your_value_name, true/false); 然后应用编辑。

希望,有帮助

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final CheckBox checkBox = (CheckBox)findViewById(R.id.checkBox);
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        final SharedPreferences.Editor editor = preferences.edit();
        if(preferences.contains("checked") && preferences.getBoolean("checked",false) == true) {
           checkBox.setChecked(true);
        }else {
            checkBox.setChecked(false);

        }
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(checkBox.isChecked()) {
                    editor.putBoolean("checked", true);
                    editor.apply();
                }else{
                    editor.putBoolean("checked", false);
                    editor.apply();
                }
            }
        });
    }