2017-03-07 11 views
1

ListPreferenceのエントリ値を整数として保存する方法を理解する上で問題があります。ListPreference値が文字列として格納されていない

<array name="list_preference_sorting_options_entries"> 
    <item>@string/list_preference_sorting_options_entry_popularity</item> 
    <item>@string/list_preference_sorting_options_entry_top_rated</item> 
</array> 

<array name="list_preference_sorting_options_entry_values"> 
    <item>@string/list_preference_sorting_options_entry_value_popularity</item> 
    <item>@string/list_preference_sorting_options_entry_value_top_rated</item> 
</array> 

は私が文字列値を使用していますことを理解:entriesentryValues属性は、以下の配列で定義されている

<ListPreference 
    android:defaultValue="@string/list_preference_sorting_options_default_value" 
    android:title="@string/list_preference_sorting_options_title" 
    android:key="@string/list_preference_sorting_options_key" 
    android:entries="@array/list_preference_sorting_options_entries" 
    android:entryValues="@array/list_preference_sorting_options_entry_values"/> 

を...:次のように今のところ、私は私のListPreferenceを定義していますlist_preference_sorting_options_entry_valuesアレイ内。しかし、私のような、別の方法で私の配列を定義した場合:私は、私のアプリのクラッシュを設定アクティビティにアクセスしようとした場合、その後、私のアプリ内...

<array name="list_preference_sorting_options_entry_values"> 
    <item>0</item> 
    <item>1</item> 
</array> 

。私は(彼らは文字列として格納されているにもかかわらず)SharedPreferencesからint型としての私のエントリの値を読み取るしようとした場合

さらに、次のように:

int methodFlag = preferences.getInt(getString(R.string.list_preference_sorting_options_key), 0); 

...そして私はその私ができるJavaエラーを受け取りますStringをint型にキャストしません。私が直接arrays.xmlを通じて整数値を格納するための方法はあり

String preferenceMethodFlagString = preferences.getString(getString(R.string.list_preference_sorting_options_key),getString(R.string.list_preference_sorting_options_default_value)); 

    int preferenceMethodFlag = Integer.parseInt(preferenceMethodFlagString); 

:適切intとしてエントリ値を得るために、私はgetString()メソッドを使用して、int型にそれを解析する必要があります?この実装を(arrays.xmlを使用して)使用すると、Stringを解析してintにする必要がありますか?

SharedPreferences.Editorが使用されている場合、整数値はListPreferenceのエントリ値に格納されます。これは整数値を格納する唯一の手段ですか?

+0

まだ回答がありません。誰もこれに任意の入力を持って起こるだろうか? – coolDude

+0

エントリ値を配列ではなく整数配列に入れるとどうなりますか? –

+0

ああ、あなたはできないhttp://stackoverflow.com/questions/11346916/listpreference-use-string-array-as-entry-and-integer-array-as-entry-values-does –

答えて

2

ListPreferenceは、文字列値のみを保持できるように設計されています。また

private CharSequence[] mEntries; 
private CharSequence[] mEntryValues; 
private String mValue; 
private String mSummary; 

を次のようにListPreferenceの

メンバー変数は、値を()

mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries); 
mEntryValues = a.getTextArray(com.android.internal.R.styleable.ListPreference_entryValues); 

getTextArrayとして検索文字列アレイリソースIDのみを探し読み出されます。

したがって、エントリとentryValuesは常に文字列リソースである必要があります。

あなたはint型の値を使用したい場合は

<string-array name="entries_list_preference"> 
    <item>0</item> <!-- This does not make it int, it will be stored as string only --> 
    <item>1</item> 
    <item>2</item> 
</string-array> 

<string-array name="entryvalues_list_preference"> 
    <item>0</item> 
    <item>1</item> 
    <item>2</item> 
</string-array> 

あなたはその値を読んでいる、整数としてそれを解析。

これで、必要に応じてperformAction(int型)メソッドを記述できます。

1

できません。 Androidはエントリとエントリ値の両方に文字列配列を使用します。しかし、Integer.parseInt()メソッドを使用すると、Stringをintに簡単に変換できます。お役に立てれば。

関連する問題