2010-09-14 55 views
0

我已經實現了onPreferenceClick(偏好)回調接口如何在點擊時更改首選項對話框的內容?

public boolean onPreferenceClick(Preference arg0) { 

if (arg0 instanceof ListPreference){ 
    addListPreferenceEntriesFromStore((ListPreference) arg0, getSharedPreferences("cfn_preferences", MODE_PRIVATE)); 
} 

else if (arg0 instanceof EditTextPreference){ 
    ((EditTextPreference)arg0).setTitle("Hallabalooo"); 
    ((EditTextPreference)arg0).setDialogTitle("Tjillevipp"); 
} 

return true; 
} 

當我點擊了第一次冠軍,在PreferenceScreen,符合市場預期,但該對話框的標題是不改變的EditTextPreference。第二次點擊EditTextPreference時,對話框標題也會更新。

我遇到了與ListPreference相同的行爲。 addListPreferenceEntriesFromStore()方法更新ListPreference的內容,但該更改在第一次顯示ListPreference時不可見。

似乎在onPreferenceClick()回調的上下文期間對首選項的對話框部分所做的更改未顯示。

我在這裏做錯了什麼?還是有解決方法?

感謝任何幫助

/馬蒂亞斯

回答

0

我發現,爲我工作的解決方案。竅門是更新onPreferenceChange中的Preference對象。

首先,請確保您在課堂中具有對您的偏好設置對象的引用。

private EditTextPreference myPreference;

然後爲onPreferenceChange添加一個偵聽器。在離開方法之前,用新值更新對象。我認爲問題在於這裏的對話框中沒有設置新的值。

公共布爾onPreferenceChange(偏好的偏好,對象objValue){

if (preference == myPreference) { 

     // other stuff you need to do <here> 

     myPreference.setText((String)objValue); 

     return false; // don't update pref value 
    } 
    return true; 
} 
相關問題