-1

閱讀有關設置Android文檔後,我有幾個問題,關於聽力偏好的變化使用監聽偏好的改變

「有你可能要像使用立即通知幾個原因更改其中一個首選項爲了在任何一個首選項發生更改時接收回調,請實現SharedPreference.OnSharedPreferenceChangeListener接口並通過調用registerOnSharedPreferenceChangeListener()註冊SharedPreferences對象的偵聽器。

我不明白爲什麼它實現這個監聽器很重要,它有什麼用處?它有什麼作用?何時使用它?現在,如果沒有實現監聽器,我的設置可以正常工作,對於任何設置或僅僅在特定情況下,它都至關重要? 謝謝。

資源:http://developer.android.com/guide/topics/ui/settings.html#Fragment

+0

讓我們說一旦用戶更改任何內容,您將更改您的PreferenceActivity/Fragment內的偏好說明。那麼你可以使用它... – Opiatefuchs 2014-09-29 14:16:14

+0

如果你不需要它,不要使用它。 – 323go 2014-09-29 14:33:13

回答

0

你不需要實施OnSharedPreferenceChangeListener。這是一種方便的功能。

有時您想立即對偏好做出改變。例如,如果您有一個「設置」操作,用戶可以(例如)更改活動的背景顏色,那麼當用戶進行選擇時,您希望立即更改背景顏色,而不是在用戶重新啓動時活動。一種方法是讓活動檢查onResume()中的後臺首選項的狀態,但另一種方法是讓活動註冊OnSharedPreferenceChangeListener,onStart和(取消其在onStop中的註冊)。我發現以這種方式使用監聽器有時會導致更簡單的代碼。當應對設置更改作出反應的代碼通常不參與框架的生命週期方法時,它也有很大幫助。

實施OnSharedPreferenceChangeListener非常簡單。您只需要將您的課程聲明爲implements OnSharedPreferenceChangeListener或者實現一個對象。例如:

public class MyActivity extends Activity { 
    . . . 
    private final OnSharedPreferenceChangeListener mPrefsListener = 
     new OnSharedPreferenceChangeListener() { 
      @Override 
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
                String key) 
      { 
       if (key.equals(IMPORTANT_PREF_KEY)) { 
        setImportantValue(sharedPrefs.getInt(IMPORTANT_PREF_KEY, -1)); 
       } 
      } 
     }; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     PreferenceManager.getDefaultSharedPreferences(this) 
      .registerOnSharedPreferenceChangeListener(mPrefsListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     PreferenceManager.getDefaultSharedPreferences(this) 
      .unregisterOnSharedPreferenceChangeListener(mPrefsListener); 
    } 

    void setImportantValue(int value) { 
     . . . 
    } 
} 
+0

哦,我看到謝謝,我該怎麼辦?開發人員的資源在解釋這一點時真的很糟糕,哪些活動必須實現OnSharedPreferenceChangeListener?保存我的片段的設置活動?我的片段?或者這種變化將會導致哪些活動? – james 2014-09-29 14:23:35

+0

@james - 我添加了一些示例代碼。你可以在任何可以訪問'SharedPreferences'對象的代碼中使用'OnSharedPreferenceChangeListener'。它不一定是一個活動或片段(儘管這些活動或片段通常用於某個活動或片段)。 – 2014-09-29 14:35:41

+0

你能解釋一下setImportantValue(sharedPrefs.getInt(IMPORTANT_PREF_KEY,-1))這行嗎? – james 2014-09-29 14:41:03