web-dev-qa-db-ja.com

ListPreferenceのデフォルト値を設定する方法

アクティビティの開始時に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);

ただし、デフォルトとして最初の選択が行われるため、機能しません。デフォルトとして別のものを作る方法を教えてもらえますか?ありがとう。

47
Gnufabio

やってみました:

setValueIndex(int index);
28
biddulph.r

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をデフォルト値として選択しました。 defaultvalueopts_values要素になります。

94

申し訳ありませんが私の悪い英語。

  1. リストアイテム
  2. リストを取得する値がnullかどうかを確認します。 nullの場合、デフォルト値に設定されます。

コード:

ListPreference dataPref = (ListPreference) findPreference("keyList");

if(dataPref.getValue() == null){
    dataPref.setValueIndex(0); //set to index of your deafult value
}
8
Leandro P.

他の誰かがこの問題を抱えている場合の記録のために:

setValueIndex(int X)は@インデックスXの値をデフォルト値に設定しているため、おそらく探しているものです。

この値を設定します[〜#〜] after [〜#〜]値を追加しました! (愚かな間違いですが、30分かかりました)

3

または、colour.setValue(mycolour);を試すこともできます

3
ungalcrys
_((ListPreference) findPreference("pref_language")).setValue(Locale
                .getDefault().getLanguage());
_

setValue()はListPreferenceのメソッドであり、setDefaultvalueはPreferenceのメソッドです

2
laomo

これは古い投稿ですが、次のコード行でListPreferenceのデフォルト値を設定する別の方法があります。

PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
1
wooldridgetm

実際には、アプリケーションを再構築した後、SharedPreferencesが保持されるためです。アンインストールして再試行してください。

1
Yijun Li

このようなキーを使用してデフォルト値を設定できます

<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" />
1
pavel

Xml属性を使用しますAndroid:defaultValue="<VALUE>"をリストタグでデフォルト値を設定します。

注:<VALUE>は実際の値であり、文字列配列のインデックスではありません。

それでも動作しない場合は、以下の手順を試してください。

  • アプリケーションデータを消去します。
  • アプリをアンインストールして再インストールする
  • リストの設定を確認すると、デフォルト値が選択されていることがわかります

奇妙なことは知っていますが、私の場合はうまくいきました。

0
Vivek