при тестировании действия в моем приложении я вижу, что оно не использует значения, которые я установил с помощью 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(), "");
Кроме того, этот следующий код выглядит правильно для вас? (Я также был бы признателен, если бы кто-нибудь сказал мне, как сделать оператор «если», сравнивающий несколько переменных одновременно, например, если (одно из трех полей пусто) {сделать что-то})
//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.