24

これには本当に苦労しました。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;
 }}

 );}
 }

信頼できるガイドをまだ見つけていないので、完全なチュートリアルとサンプル コードは素晴らしいものです。

4

3 に答える 3

17

私はまだこれをすべて自分で取り組んでいますが、(私のバージョンから多少適応しています)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 宣言についてはよくわかりません!)

于 2010-06-11T17:50:28.450 に答える
4

おそらく 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);

また、 Editor は必要ありません。設定は自動的に保存されます。

于 2010-06-10T07:05:48.860 に答える
0

ほとんどのアプリでは、デフォルトの共有設定を使用するのが最も便利です。アプリ内のどこからでも取得できます:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);

次の方法で新しい変数を保存できます。

sp.edit().putString("var_name", "var value".apply();
于 2014-07-03T19:10:46.830 に答える