2011-05-12 33 views
3

我在我的Android應用程序的偏好系統中有一個ListPreference,允許用戶從多達5個不同賬戶中選擇一個數值。在喜好內部,他們需要能夠在他們希望使用的帳戶之間切換。但問題是,當我點擊其中一個選項時,在列表打開之前,我從得到選擇。代碼如下:Android List Preference one step behind

// 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; 
     } 

    });   

所以,如果我選擇對話框中的第三個條目,日誌返回「1」。如果我然後選擇第五個,它返回「3」。它似乎在之前返回選擇的新選擇。我如何去獲得目前的選擇,而不是最後一個?

+0

http://stackoverflow.com/questions/6148952/how-to-get-selected-text-and-value-android-listpreference – 2012-08-01 04:54:31

回答

2

如果是這樣,那是因爲您正在閱讀accountPref.getValue()。該值尚未提交,它只承諾一次onPreferenceChange()返回true。相反,使用newValue參數來讀取用戶具有只需挑選。

+0

完美,這正是我做錯了。現在我更加註意它了。謝謝dmon,感謝它! – AzHole 2011-05-12 14:44:20