2013-08-27 59 views
2

我有一個名爲MyDialogPreferenceDialogPreference一個子類,它有兩個EditTexts用戶名和密碼,當我點擊DialogInterface.BUTTON_POSITIVE按鈕,我設置一些喜好這樣的:集DialogPreference總結OnPreferenceChange

//I get userId from SQLite before this 
SharedPreferences settings = this.getContext() 
       .getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 

editor.putInt("userId", userId); 
editor.commit(); 

我想要的在我SettingsFragment那個叫DialogPreference,每當我關閉MyDialogPreference,我可能是能夠顯示數據改變爲偏好

這裏彙總的偏好的layour:

<Preference 
     android:key="update" 
     android:title="Update other preference" > 
    </Preference> 

    <com.cmr.MyDialogPreference 
     android:key="userPassScreen" 
     android:title="Login User" > 
    </com.cmr.MyDialogPreference> 

我試圖將此DialogPreference綁定到OnPreferenceChangeListener,但它沒有奏效。

下面是也代碼:

DialogPreference userPassScreen = (DialogPreference) findPreference("userPassScreen"); 
userPassScreen 
      .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

       @Override 
       public boolean onPreferenceChange(Preference preference, 
         Object newValue) { 
        SharedPreferences settings = context 
          .getSharedPreferences(PREFS_NAME, 0); 

        int userId = settings.getInt("userId", 0); 
        if (userId == 0) { 
         preference.setSummary("Please Login"); 
         return false; 
        } 
        try { 
         preference.setSummary(String.valueOf(userId)); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

        return false; 
       } 
      }); 

有什麼辦法,我可以做這個?

PS。對不起,我的英文不好

+0

好吧,沒有人回答,但我目前發現這個問題的解決方案[這裏](http://stackoverflow.com/a/531927/315905),使用SharedPreferencesListener – jmacboy

回答

4

DialogPreference的Android文檔不完整!

只要看看在首#的onClick()

/** 
* Processes a click on the preference. This includes saving the value to 
* the {@link SharedPreferences}. However, the overridden method should 
* call {@link #callChangeListener(Object)} to make sure the client wants to 
* update the preference's state with the new value. 
*/ 
protected void onClick() { 
} 

「重寫方法應該調用{@link #callChangeListener(對象)}」

在DialogPreference的onClick被覆蓋到的JavaDoc打開對話框,但onDialogClosed()的JavaDoc沒有提及調用#callChangeListener(Object)。

所以只需添加一個

callChangeListener(newValue); 

調用您的onDialogClosed()開始執行。

但是,這應該已在DialogPreference本身中實現。