-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