我正在使用Preferences-API
在我的应用程序中实现设置。
我选择使用PreferenceFragment
。
我的PreferenceFragment
包含我的onSharedPreferenceChanged
代码。
但是,对于我的一个Preferences
,我不知道如何实现我的目标。
目标是:基于TogglePreference,启用或禁用我的Receiver。
下面,我已经包含了我认为的两种不同的方式。
我对这两个例子的推理是#1没有使用findPreference(key)
而#2没有。
所以我要求反馈 - 哪种方式是正确的?
public static final String PREF_GPS_STATE_LISTENER = "pref_gpsStateListener";
private SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener;
...
...
prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged
(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_GPS_STATE_LISTENER)) {
final PackageManager pacMan =
getActivity().getApplicationContext().getPackageManager();
final ComponentName compLocationReceiver = new ComponentName
("com.studio2bdesigns.testapp021019", ".LocationReceiver");
final SharedPreferences getPrefs =
PreferenceManager.getDefaultSharedPreferences(getActivity());
if (getPrefs.getBoolean(PREF_GPS_STATE_LISTENER, true)) {
// ENABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
} else if (!getPrefs.getBoolean(PREF_GPS_STATE_LISTENER, true)) {
// DISABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
}
}
(或)这是正确的方法:
private SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener;
...
...
prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged
(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_GPS_STATE_LISTENER)) {
Preference gpsStateListenerPref = findPreference(key);
final PackageManager pacMan =
getActivity().getApplicationContext().getPackageManager();
final ComponentName compLocationReceiver = new ComponentName
("com.studio2bdesigns.testapp021019", ".LocationReceiver");
if (gpsStateListenerPref.isEnabled()) {
// ENABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
} else if (!gpsStateListenerPref.isEnabled()) {
// DISABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
}
}
起初我认为选项#1是正确的 - 但我提出选项#2的原因是因为第一个例子不使用findPreference(key);
- 这是在key
中传递onSharedPreferenceChanged
的全部意义不是吗?
非常感谢对此的反馈!谢谢!
该键用于将可视控件与共享首选项相匹配。这确实是一个偏好的问题。我更喜欢使用数字1,因为我不依赖于视图,并使共享偏好成为您的真实来源。