私はこれを本当に苦労してきました。 Java/Androidの新機能。私は最初のアプリを書いています。これが、数日間検索して理解するのにかかった最初のことです。これが設定です:BAC計算機/ドリンクカウンターです:
BACの計算には式が使用されます。ここにフォーラムラがあります:
Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);
ご覧のとおり、性別と体重を変更できると、より正確でパーソナライズされた結果が得られます。だから私はそれらをダブルスとして持っています:
double GenderConstant = 7.5; //9 for female
double Weight = 180;
これらの変数を変更するには、その人が設定に移動して別の値を選択できるようにしたいと思います。私はこれらのものをセットアップしましたが、上に示した変数にリンクしていません。なぜなら、私は自分の人生ではどのようにしているかを理解できないからです。どうぞ:
メニューボタンを押すとポップアップします。すごい。 「設定」をクリックします。
設定がポップアップします。これが私の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で作成したdoubleとリンクされていないため、式は変更されません。設定に表示されるものはすべて、現時点では空のシェルであり、メインレイアウトのスピナーを含みます(デフォルトの時間は1時間に設定されています)
私はPreferences.Javaを作成し、チュートリアルやWeb上のリソースにあるコードのさまざまな組み合わせを実装しようとしましたが、役に立ちませんでした。とにかく、それは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
}
}
設定の更新の保存はあなたのために処理されます。
(パブリック/プライベート宣言についてはあまりわかりません!)
おそらく2つの異なる設定ファイルのセットを要求しています。
ListPreference値を同じファイルに保存してください。スタートアップadb
ロールcd /data/data/com.your.package
で、タイプ設定のフォルダとファイルを探します。
設定が保存されているファイルとは異なるファイルを指定したことがバグだと思います。
これを変更してみてください:
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
に
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
次に、おそらくクエリのみを行う必要があります
preferences.getString('weightPref', null);
また、あなたはエディタは必要ありませんです。設定は自動的に保存されます。
ほとんどのアプリでは、デフォルトの共有設定を使用するのが最も便利です。アプリ内のどこからでも、次の方法で取得できます。
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
新しい変数をそれに保存することができます:
sp.edit().putString("var_name", "var value".apply();