3

Androidアプリの設定システムにListPreferenceがあり、ユーザーは最大5つの異なるアカウントに相当するデータの1つから選択できます。設定内では、現在使用したいアカウントを切り替えることができる必要があります。ただし、問題は、選択肢の1つをクリックすると、リストが開かれるの選択肢が表示されることです。次のようにコーディングします。

    // Get the Account Preferences pointer
    final ListPreference accountPref = (ListPreference) findPreference("accountPref");
    CharSequence[] entries = { "Account 1", "Account 2", "Account 3", "Account 4", "Account 5" };
    CharSequence[] entryValues = { "1", "2", "3", "4", "5" };
    accountPref.setEntries(entries);
    accountPref.setEntryValues(entryValues);
    accountPref.setDefaultValue("1");

    accountPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            Log.i("theApp", "Selected = " + accountPref.getValue());
            return true;
        }

    });        

したがって、ダイアログで3番目のエントリを選択すると、ログは「1」を返します。次に5番目を選択すると、「3」が返されます。新しい選択のに選択を返しているようです。最後の選択ではなく、現在の選択を取得するにはどうすればよいですか?

4

1 に答える 1

2

もしそうなら、それはあなたが読んでいるからですaccountPref.getValue()。値はまだコミットされていません。がonPreferenceChange()返された場合にのみコミットされますtrue。代わりに、newValueパラメーターを使用して、ユーザーが選択したものを読み取ります

于 2011-05-12T14:41:52.203 に答える