18

XmlでListPreferenceを定義し、getIntを使用してSharedPreferencesから値を取得することは可能ですか?これが私のXmlです:

<ListPreference android:key="@string/prefGestureAccuracyKey"
    android:title="@string/prefGestureAccuracyTitle" android:summary="@string/prefGestureAccuracyDesc"
    android:entries="@array/prefNumberAccuracyLabels" android:entryValues="@array/prefNumberAccuracyValues"
    android:dialogTitle="@string/prefGestureAccuracyDialog"
    android:persistent="true" android:defaultValue="2"
    android:shouldDisableView="false" />

そして、次のような値を取得したいと思います:int val = sharedPrefs.getInt(key、defaultValue)。

現時点では、getStringを使用して結果を解析する必要があります。

4

5 に答える 5

40

私の理解では、ListPreferenceは文字列配列でのみ機能します。getString()を使用して、自分で整数に変換する必要があります。これに関するバグレポートについては、http://code.google.com/p/android/issues/detail?id=2096を参照してください。GoogleがListPreferenceを拡張して文字列以外のものを処理することを計画しているようには見えません。

また、設定を文字列として保存する必要もあります。そうしないと、設定アクティビティが起動して文字列値を読み取ろうとしたときにクラッシュします。

于 2010-06-13T03:14:59.230 に答える
6

私はこれをもう少し極端な方法で行いました。

ListPreferenceを使用し、entryValues配列に、Integer.parseInt()を使用して整数に変換できる文字列を含めるようにしました。

次に、PreferencesActivityで、この設定のOnPreferenceChangeListenerを設定し、onPreferenceChange()メソッドで、整数バージョンに別の設定を設定します。この2番目の設定は、コードで実際に使用するものです。1つ目は、ユーザーオプション専用です。

このように、文字列を見る必要があるたびに文字列をintに変換する必要はありません。ユーザーが設定したときに、文字列を変換するだけです。おそらくやり過ぎですが、それは機能します:)

于 2011-09-28T18:21:25.537 に答える
2

実際、ドキュメントで読むことができるように:

http://developer.android.com/reference/android/preference/ListPreference.html#getValue()

ListPreference値を取得する方法は次のとおりです。

public String getValue ()

したがって、文字列を取得します。大したことではありませんが、整数を認める方がきれいかもしれません。

于 2012-05-16T21:35:55.950 に答える
0

xmlリソースを作成し、デフォルト値をそれに設定する必要があります。XMLファイルにリテラルとして入力したものはすべて文字列として扱われるため、ListPreferenceは整数配列で文字列を検索しようとすると、nullポインタ例外をスローします。

于 2012-05-04T16:42:42.007 に答える
0

しかし、私にとっては、最初に次のように文字列型を取得します。String numStr = prefs.getString( "key"、 "-555"); 次に: `

try {
    int yourInt =  Integer.parseInt(numStr);
    if(yourInt != -555)
    {
        //do your stuff
    }
}
catch(Exception e)
{
    ...
}

`

于 2016-08-11T00:44:58.220 に答える