アクティビティの開始時にListPreferenceのデフォルト値を設定する必要があります。 ListPreference.setDefaultvalue("value");
で試しましたが、リストの最初のエントリがデフォルトになります。必要なのは、条件をチェックし、その条件を満たす値をデフォルトとして設定する必要があるため、xmlファイル(Android:defaultValue
)からは実行できないと思うからです。
たとえば、arrays.xmlに次の値の配列があるとします。
<string-array name="opts">
<item>red</item>
<item>green</item>
<item>blue</item>
</string-array>
<string-array name="opts_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
PreferenceScreen xmlで:
<ListPreference
Android:title="Colour select"
Android:summary="Select your favourite"
Android:key="colour"
Android:entries="@array/opts"
Android:entryValues="@array/opts_values" />
アクティビティでは、次のようなことをしたいと思います。
String mycolour;
if (something) {
mycolour="1";
} else {
mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);
ただし、デフォルトとして最初の選択が行われるため、機能しません。デフォルトとして別のものを作る方法を教えてもらえますか?ありがとう。
やってみました:
setValueIndex(int index);
ListPreferences
のデフォルト値をプログラムで処理する必要はありません。これは、xml設定ファイルで行うことができます。以下は例です
<string-array name="opts">
<item>red</item>
<item>green</item>
<item>blue</item>
</string-array>
<string-array name="opts_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<ListPreference
Android:title="Colour select"
Android:summary="Select your favourite"
Android:key="colour"
Android:entries="@array/opts"
Android:entryValues="@array/opts_values"
Android:defaultValue="2" />
ここでは、2
をデフォルト値として選択しました。 defaultvalue
はopts_values
要素になります。
申し訳ありませんが私の悪い英語。
コード:
ListPreference dataPref = (ListPreference) findPreference("keyList");
if(dataPref.getValue() == null){
dataPref.setValueIndex(0); //set to index of your deafult value
}
他の誰かがこの問題を抱えている場合の記録のために:
setValueIndex(int X)
は@インデックスXの値をデフォルト値に設定しているため、おそらく探しているものです。
この値を設定します[〜#〜] after [〜#〜]値を追加しました! (愚かな間違いですが、30分かかりました)
または、colour.setValue(mycolour);
を試すこともできます
_((ListPreference) findPreference("pref_language")).setValue(Locale
.getDefault().getLanguage());
_
setValue()
はListPreferenceのメソッドであり、setDefaultvalue
はPreferenceのメソッドです
これは古い投稿ですが、次のコード行でListPreference
のデフォルト値を設定する別の方法があります。
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
実際には、アプリケーションを再構築した後、SharedPreferencesが保持されるためです。アンインストールして再試行してください。
このようなキーを使用してデフォルト値を設定できます
<string-array name="syncFrequency">
<item name="1">Block All Calls</item>
<item name="2">Block Black List</item>
<item name="3">Block Unknown Calls</item>
<item name="4">Allow White List</item>
<item name="5">Receive All Calls</item>
</string-array>
<string-array name="syncFrequencyValues">
<item name="1">Block_All_Calls</item>
<item name="2">Block_Black_List</item>
<item name="3">Block_Unknown_Calls</item>
<item name="4">Allow_White_List</item>
<item name="5">Receive_All_Calls</item>
</string-array>
<ListPreference
Android:key="prefSyncFrequency"
Android:entries="@array/syncFrequency"
Android:summary="%s"
Android:defaultValue="Block_Black_List"
Android:entryValues="@array/syncFrequencyValues"
Android:title="@string/call_block_options" />
Xml属性を使用しますAndroid:defaultValue="<VALUE>"
をリストタグでデフォルト値を設定します。
注:
<VALUE>
は実際の値であり、文字列配列のインデックスではありません。
それでも動作しない場合は、以下の手順を試してください。
奇妙なことは知っていますが、私の場合はうまくいきました。