无法从Android Checkbox Preference查询值

时间:2016-03-15 00:17:24

标签: java android button checkboxpreference

我在下面有两项活动。 看我的代码......

SettingsActivity.java

public class  SettingsActivity extends AppCompatPreferenceActivity {

static CheckBoxPreference checkBoxPreference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    checkBoxPreference = (CheckBoxPreference)findPreference("checkPref");
    setupActionBar();
}

private void setupActionBar() {
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

}

MainActivity.java

public class MainActivity extends AppCompatActivity {

Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                if (SettingsActivity.checkBoxPreference.isChecked()){
                    Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "Not Checked", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e){
                Toast.makeText(MainActivity.this, "Failed to query", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

}

因为我在这里使用了 Try-Catch ,所以它并没有崩溃。但每次我点击按钮,它都会显示"无法查询"

这里有什么问题?请帮助!!!

2 个答案:

答案 0 :(得分:0)

您正在使用SettingsActivity.checkBoxPreference表示checkBoxPreference当前是static字段,既不指向任何preference,也不知道它的行为。它只使用字段声明。

我通常使用以下模式

来实现
SharedPreferences sharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(this);

使用

检索CheckBoxPreference
sharedPrefs.getBoolean("checkPref", false));

我建议您一般遵循this示例。

答案 1 :(得分:0)

我猜是因为SettingsActivity.checkBoxPreference为null而发生异常,尝试删除这个Try-Catch,你会发现真正的异常