Android - 首选项 API onSharedPreferenceChanged - 哪种方式正确?
Android - Preferences API onSharedPreferenceChanged - Which way is correct?
我正在使用 Preferences-API
在我的应用程序中实施设置。
我选择使用 PreferenceFragment
.
我的 PreferenceFragment
包含我的 onSharedPreferenceChanged
代码。
但是,对于我的 Preferences
之一,我不确定要以何种方式实现我的目标。
目标是:基于 TogglePreference,启用或禁用我的 Receiver。
下面,我列出了我想做的 2 个不同的方法。
我对这两个例子的推理是 #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);
}
}
}
(OR) 这是正确的方法吗:
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,因为我不依赖于某个视图,并且让共享偏好成为你的真实来源。
我正在使用 Preferences-API
在我的应用程序中实施设置。
我选择使用 PreferenceFragment
.
我的 PreferenceFragment
包含我的 onSharedPreferenceChanged
代码。
但是,对于我的 Preferences
之一,我不确定要以何种方式实现我的目标。
目标是:基于 TogglePreference,启用或禁用我的 Receiver。
下面,我列出了我想做的 2 个不同的方法。
我对这两个例子的推理是 #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);
}
}
}
(OR) 这是正确的方法吗:
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,因为我不依赖于某个视图,并且让共享偏好成为你的真实来源。