繁体   English   中英

无法从Android复选框首选项查询值

[英]Failed to query value from Android Checkbox Preference

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

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一样 ,它没有崩溃。 但是,每当我单击该按钮时,它就会显示“无法查询”

怎么了 请帮忙!!!

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

我通常通过使用以下模式来做到这一点

SharedPreferences sharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(this);

使用以下方法检索CheckBoxPreference

sharedPrefs.getBoolean("checkPref", false));

我建议您大致遵循示例。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM