阅读有关设置的 Android 文档后,我有一些关于监听首选项更改的问题
"There are several reasons you might want to be notified as soon as the use changes one of the preferences. In order to receive a callback when a change happens to any one of the preferences, implement the SharedPreference.OnSharedPreferenceChangeListener interface and register the listener for the SharedPreferences object by calling registerOnSharedPreferenceChangeListener()."
我不太明白,我也找不到为什么实现这个监听器很重要,它有什么用?它有什么作用?什么时候使用它?现在,在不实现监听器的情况下,我的设置工作正常,这对于任何设置还是仅在特定情况下都至关重要? 谢谢。
资源:http://developer.android.com/guide/topics/ui/settings.html#Fragment
最佳答案
您无需实现 OnSharedPreferenceChangeListener
。这是为了方便而存在的功能。
有时您希望立即对偏好的变化使用react。例如,如果您有一个“设置”操作,用户可以在其中更改 Activity 的背景颜色,那么当用户进行选择时,您希望背景颜色立即更改,而不是在用户重新启动时更改 Activity 。执行此操作的一种方法是让 Activity 检查 onResume()
中的后台首选项的状态。 ,但另一种方法是让 Activity 注册 OnSharedPreferenceChangeListener
在onStart
并(在 onStop
中取消注册)。我发现以这种方式使用监听器有时可以使代码更简单。当应对设置更改使用react的代码通常不参与框架的生命周期方法时,它也会有很大帮助。
实现OnSharedPreferenceChangeListener
非常简单。您只需将您的类(class)声明为 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) {
. . .
}
}
关于android - 使用倾听来了解偏好变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26101873/