Я действительно боролся через это. В новинку для Java/Android. Я пишу свое первое приложение, и это - первая вещь, которая взяла меня дольше, чем пара дней поиска для выяснения. Вот установка: это - калькулятор BAC / счетчик напитка:
Формула используется для вычисления BAC. Вот forumla:
Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);
Таким образом, как Вы видите, способность изменить пол и вес приведет к более точным и персонализированным результатам. Таким образом, у меня есть они, как удваивается:
double GenderConstant = 7.5; //9 for female
double Weight = 180;
Для замены этих переменных, я хотел бы, чтобы человек смог войти в настройки и выбрать различные значения. Мне настраивали эти вещи, но не связанный с переменными, показанными выше, потому что я не могу ни за что в жизни выяснить как. Здесь они:
Я нажимаю кнопку меню, и это открывается.Отлично. Я нажму Settings.
Теперь предпочтения открываются. Вот мой preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Personal Settings">
<ListPreference
android:title="Gender"
android:summary="Verify or deny the presence of a Y chromosome."
android:key="genderPref"
android:defaultValue="male"
android:entries="@array/genderArray"
android:entryValues="@array/genderValues" />
<ListPreference
android:title="Weight"
android:summary="How much the planet pulls on you, in pounds."
android:key="weightPref"
android:defaultValue="180"
android:entries="@array/weightArray"
android:entryValues="@array/weightValues" />
</PreferenceCategory>
<PreferenceCategory android:title="Drink Settings">
<ListPreference
android:title="Beer Size"
android:summary="The volume of your beer, in ounces."
android:key="beerPref"
android:defaultValue="12"
android:entries="@array/beerArray"
android:entryValues="@array/beerValues" />
<ListPreference
android:title="Shot Size"
android:summary="The volume of your shot, in ounces."
android:key="shotPref"
android:defaultValue="1.5"
android:entries="@array/shotArray"
android:entryValues="@array/shotValues" />
<ListPreference
android:title="Wine Size"
android:summary="The volume of your wine, in ounces."
android:key="winePref"
android:defaultValue="5"
android:entries="@array/wineArray"
android:entryValues="@array/wineValues" />
</PreferenceCategory>
</PreferenceScreen>
Вперед к весу ListPreference:
И это обнаруживается. Значения хранятся как массивы строк в res/values/arrays.xml. Вот образец просто веса:
<string-array name="weightArray">
<item>120 lbs</item>
<item>150 lbs</item>
<item>180 lbs</item>
<item>210 lbs</item>
<item>240 lbs</item>
<item>270 lbs</item>
</string-array>
<string-array name="weightValues">
<item>120</item>
<item>150</item>
<item>180</item>
<item>210</item>
<item>240</item>
<item>270</item>
</string-array>
Это в основном насколько я добрался. Я могу нажать значение, уверенное, но оно не изменяет формулу, потому что оно не связано с удваиванием, я создал в DrinkingBuddy.java. Весь материал, отображенный в настройках, является просто пустыми оболочками на данный момент, включая счетчик на основном расположении (время по умолчанию просто установлено на 1 час),
Я действительно создавал Preferences.java и попытался реализовать различные комбинации кода, найденного в учебных руководствах и ресурсах вокруг сети, но напрасно. Здесь это так или иначе, заполненный неудачными попытками сделать beerPref (опция настроек измениться, сколько унций в пиве) коррелируют с переменной в моем основном классе:
package com.dantoth.drinkingbuddy;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
public class Preferences extends PreferenceActivity {
public static final String PREF_BEER_SIZE = "PREF_BEER_SIZE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
//Get the custom preference
Preference beerPref = (Preference) findPreference("beerPref");
beerPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
SharedPreferences customSharedPreference = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = customSharedPreference.edit();
editor.commit();
return true;
}}
);}
}
Полное на учебном и примере кода было бы ПОТРЯСАЮЩИМ, поскольку я должен все же найти любые надежные руководства там.
Я все еще работаю над этим сам, но (немного адаптированный из моей версии) я думаю, что ваш класс Preferences должен делать только следующее:
public class Preferences extends PreferenceActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// load the XML preferences file
addPreferencesFromResource(R.xml.preferences);
}
}
Затем в вашем основном классе вы можете ссылаться на предпочтения:
public class DrinkingBuddy extends Activity
implements OnSharedPreferenceChangeListener {
private int weight;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// register preference change listener
prefs.registerOnSharedPreferenceChangeListener(this);
// and set remembered preferences
weight = Integer.parseInt((prefs.getString("weightPref", "120")));
// etc
}
// handle updates to preferences
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("weightValues")) {
weight = Integer.parseInt((prefs.getString("weightPref", "120")));
}
// etc
}
}
Сохранение обновлений предпочтений обрабатывается для вас.
(Не слишком уверен насчет деклараций public/private!)
Вы запрашиваете, вероятно, два разных набора файлов предпочтений.
Убедитесь, что вы храните значения ListPreference в одних и тех же файлах.
Запустите adb
перейдите в cd /data/data/com.your.package
и поищите папки и файлы типа preferences.
Я думаю, что ошибка в том, что вы указываете файл, отличный от того, в который сохраняются настройки:
Попробуйте изменить это:
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
на
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
Тогда вам, вероятно, придется запрашивать только
preferences.getString('weightPref', null);
Также вам не нужен редактор. Предпочтения сохраняются автоматически.