2011-02-17 31 views
2

我試圖在ListPreference中添加單個監聽器到項目中,但我找不到合適的代碼來執行此操作。將監聽器添加到單個ListPreference項目

例如,假設我有一個應用程序,需要設置區域。所以我有一個ListPreference有三個選項;美洲,亞洲,歐洲。

當我使用觸控板滾動瀏覽項目時,我希望他們在獲得焦點時說出偏好文本。

我敢肯定在API的某處我可以添加一個監聽器到單個項目,但我無法找到它。 ListPreference中有一個setOnPreferenceClickListener(..)方法(繼承自DialogPreference),但這是您選擇實際父項首選項時的方法。

我需要寫一個特殊的子類嗎?

編輯

尋找到在此之後我越覺得我需要進一步澄清我的問題。 使用首選項時,您可以覆蓋PreferenceActivity中的​​3210方法。這使您可以攔截對首選項的任何點擊。不過,我想添加一個偵聽器到彈出的實際對話框。以上示例中的「美洲,亞洲,歐洲」選項。所以如果我選擇或點擊亞洲,我可以攔截它。

所以我的(精緻的)問題是如何將監聽器添加到這些單獨的選項。

歡呼

回答

0

我覺得有計算器上的另一篇文章是與此類似:Custom Row in a ListPreference

在這一個,子類化是解決方案。但可能在你的情況下,你可以使用一個簡單的ListAdapter

如果你已經設置了適配器,您可以使用的方法onItemClick和方法中可以使用switch聲明(case是id或數組或像這樣的東西的指數)來調用不同的方法。

我希望我能理解你的問題...... :)

啊!你還需要看看onFocusChange Listener。您可以將此偵聽器添加到每個首選項(它必須是View;您將偵聽器添加到適配器中),然後在偵聽器方法中具有已宣告的switch語句。

問候,我希望我能爲你提供一個提示,

朱利安sharedPref值更改後

+1

感謝朱利安。我現在正在看。我仍然試圖繞過PreferenceScreen,ListPreference,ListView,ListAdapter以及它們如何融合在一起。我基本上需要得到我的ListPreference的'ListView'的引用。有沒有辦法獲得對「ListPreference」的引用(就像你可以做一個'findViewByID(R.id.my_button)')的方式? – Tim

2

OnSharedPreferenceChangeListener被調用時持續=真實的,但每個項目實際上你可以指定自己的OnPreferenceChangeListener和還有你看哪個項目被點擊

ListPreference pLocAuto = (ListPreference) findPreference(PREF_LOC_AUTO); 
pUpdateAuto.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       System.out.print(newValue.toString()); 
       return false; 
      } 
     }); 
+0

它有幫助,但如果您希望在更改後保存它,它將返回TRUE。 – careful7j

8
final ListPreference list = (ListPreference) preference; 
list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 

     int index = list.findIndexOfValue(newValue.toString()); 

     if (index != -1) { 
      Toast.makeText(getBaseContext(), list.getEntries()[index], Toast.LENGTH_LONG).show(); 
     } 
     return true; 
    } 
}); 
+0

這並不是一直在解決問題。如果用戶點擊默認項目,這個變化監聽器將不會被調用。 – yongsunCN