在我的应用程序中测试活动时,我发现它没有使用我使用 PreferenceActivity 设置的值。
我可以确认这些值是在 PrefsActivity 中正确设置的(至少是“本地”),因为每次我打开它时,设置都与我上次关闭它时的设置完全相同......
我是否必须在我的 PreferenceActivity 中指定将设置存储到哪个首选项文件中,还是我用来导入这些值以在我的活动中使用的方法有问题?感觉就像我在网上搜索了整个网络却没有找到该问题的明确答案......
这是我的活动应该加载首选项的地方,它看起来对吗?我知道这是唯一缺少的东西,因为当我在调试模式下运行它并手动输入要使用的值时,计算工作得很好......
public void OnStart() {
// Loads the values for the calculator to use
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
bodymass = settings.getInt(getString(R.string.pref_key_user_mass).toString(), 0);
gender = settings.getString(getString(R.string.pref_key_user_gender).toString(), "");
另外,以下代码对您来说是否正确?(如果有人告诉我如何制作一个“if”语句同时比较多个变量,我也将不胜感激 - 例如,如果(三个字段中的一个为空){做某事})
//Checks defined user gender and sets value to be used by calc accordingly
if (gender == "male") {
genderValue = 0.7;
}
else if (gender == "female") {
genderValue = 0.6;
}
else if (gender == "") {
settingsAlert();
}
它似乎永远不会触发 settingsAlert() 功能,即使所有应用程序数据都被擦除(然后它应该产生一条警报消息,提示用户在使用前设置首选项,但没有任何反应)
这是应该产生警报的代码:
public void settingsAlert() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("@string/dialog_setPrefs_text")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent gotoSettings = new Intent(ActivityCalc.this, ActivitySettings.class);
startActivity(gotoSettings);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.create();
}
- 更新 -
我现在已经设法让警报对话框按原样生成,我想我会发布实现它的代码行,以便其他有同样问题的人可以观看和学习...... :)
问题似乎是警报确实创建正确,但从未真正调用显示 - 因此,一旦我在最后一行的.show()
后面添加了那么一点,一切都运行良好。.create()
或者,您可以将其定义为 AlertDialog 对象,并在您喜欢时调用它:
AlertDialog alert = builder.create();
alert.show();
我在这里发布我的 PreferenceActivity 课程的内容供您查看
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This line will import the preferences to display in the settings activity
addPreferencesFromResource(R.xml.settings);
}
要了解如何构建首选项资源文件,请查看这篇文章
我不再包含用于指定要使用的共享首选项名称的字符串,因为我将 get 方法更改为使用 DefaultSharedPreferences:
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
我现在只定义并初始化了需要在活动的其余部分持久化的变量:
private double genderValue = 0;
private String gender = "";
private int bodymass = 0;
该应用程序现在完全可以正常工作 - 不会崩溃,并且可以正确加载 PreferenceActivity 中设置的首选项。