我在下面有两项活动。 看我的代码......
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 ,所以它并没有崩溃。但每次我点击按钮,它都会显示"无法查询" 。
这里有什么问题?请帮助!!!
答案 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,你会发现真正的异常