!!
我在下面有两个活动。查看我的代码...
设置活动.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);
}
}
}
主活动.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,因此它不会崩溃。但是每次我点击按钮时,它都会显示"查询失败"。
这是怎么回事?请帮忙
您正在使用SettingsActivity.checkBoxPreference
表示checkBoxPreference
当前是一个static
字段,它既不指向任何preference
,也不知道它的行为。它仅使用字段声明。
我通常使用以下模式来做到这一点
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
检索CheckBoxPreference
使用
sharedPrefs.getBoolean("checkPref", false));
我建议您通常遵循此示例。
我想异常
是因为设置活动而发生的,复选框首选项为空,尝试删除此 Try-Catch,您会发现真正的异常