共享偏好设置不保存

时间:2017-11-06 04:01:30

标签: android

我的设置对话框中的共享首选项未保存。单击“保存”,然后重新打开对话框时,首选项将重置为原始值。我觉得我错过了什么。任何帮助将不胜感激!

注意:

  1. 此对话框显示在我的主片段中。不确定这是否有所作为。
  2. 我在edit.commit()之前已经尝试过edit.clear(),但它没有用。
  3. 谢谢!

    private void settingsButton() {
    
        if(soundsOn == true) {
            mplayerButtonClick.start();
        }
        //set up dialog
        final Dialog setupDialog = new Dialog(getActivity());
        setupDialog.setContentView(R.layout.settings);
        setupDialog.setTitle("Choose Settings");
        setupDialog.setCancelable(true);
    
        TextView topSettings = (TextView)setupDialog.findViewById(R.id.chosensettings);
        topSettings.setTypeface(tf);
    
        soundsToggle = (Switch)setupDialog.findViewById(R.id.soundstoggle);
        soundsToggle.setTypeface(tf);
        if(soundsOn == true){
            soundsToggle.setChecked(true);
        }else if(soundsOn == false){
            soundsToggle.setChecked(false);
        }
        soundsToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    s = true;
                } else {
                    s = false;
                }
    
            }
        });
    
        cuesToggle = (Switch)setupDialog.findViewById(R.id.cuestoggle);
        cuesToggle.setTypeface(tf);
        final boolean cuesToggleOn = preferences.getBoolean("cues", true);
        if (cuesToggleOn == true){
            cuesToggle.setChecked(true);
        }else if(cuesToggleOn == false){
            cuesToggle.setChecked(false);
        }else{
            cuesToggle.setChecked(true);
        }
        cuesToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(cuesToggle.isChecked()){
                    c = true;
                }else{
                    c = false;
                }
            }
        });
    
    
        listOnlyToggle = (Switch)setupDialog.findViewById(R.id.listonly);
        listOnlyToggle.setTypeface(tf);
        listOnlyOn = preferences.getBoolean("listonly", false);
        if(listOnlyOn == true){
            listOnlyToggle.setChecked(true);
        }else if(listOnlyOn == false){
            listOnlyToggle.setChecked(false);
        }
        listOnlyToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    l = true;
                } else {
                    l = false;
                }
    
            }
        });
    
    
        Button saveSetting = (Button)setupDialog.findViewById(R.id.save);
        saveSetting.setTypeface(tf);
        saveSetting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                if(soundsOn == true) {
                    mplayerButtonClick.start();
                }
    
                if (s = true){
                    editor.putBoolean("sounds", true);
                    soundsOn = true;
                }else if (s = false) {
                    editor.putBoolean("sounds", false);
                    soundsOn = false;
                }
    
                if (c = true){
                    editor.putBoolean("cues", true);
                }else if (c = false){
                    editor.putBoolean("cues", false);
                }
    
                 if (l = true){
                     editor.putBoolean("listonly", true);
                 }else if (l = false){
                     editor.putBoolean("listonly", false);
                  }
    
                editor.commit();
    
                Toast.makeText(getActivity(), "saved!", Toast.LENGTH_LONG).show();
    
                setupDialog.dismiss();
    
            }
        });
    
        setupDialog.show();
    }
    

2 个答案:

答案 0 :(得分:2)

条件s = true始终为“true”。

说明 此检查分析方法控制和数据流,以报告始终为真或假的可能条件,静态证明其值不变的表达式,以及可能导致违约性合同违规的情况。

如果判断值是否为布尔值,则需要使用条件if(s)

如果您使用if(s == true)

说明 报告毫无意义或毫无意义的复杂布尔表达式。这样的表达式包括anding with true,oring with false,equor comparison with boolean literal,或negation of boolean literal。这样的表达可能是自动重构的结果,并未完全贯彻完成,并且在任何情况下都不太可能是开发人员打算做的事情。

您在代码中使用的更好方式是if(s)

答案 1 :(得分:0)

我认为您应该将“if(s = true)”更改为“if(s)”,您应该使用条件检查而不是赋值。