[英]Android - Preferences API onSharedPreferenceChanged - Which way is correct?
I am using the Preferences-API
to implement Settings into my App. 我正在使用
Preferences-API
在我的应用程序中实现设置。
I have chosen to use a PreferenceFragment
. 我选择使用
PreferenceFragment
。
My PreferenceFragment
contains my onSharedPreferenceChanged
code. 我的
PreferenceFragment
包含我的onSharedPreferenceChanged
代码。
However, for one of my Preferences
, I'm not sure which way to go about achieving my goal. 但是,对于我的
Preferences
,我不确定要实现目标的方法。
The goal is: based on the TogglePreference, either enable or disable my Receiver. 目标是:基于TogglePreference,启用或禁用我的Receiver。
Below, I have included the 2 different ways I thought to do it. 下面,我介绍了我认为的两种不同方式。
My reasoning for the two examples is #1 doesn't use findPreference(key)
and #2 does. 我对两个示例的推理是#1不使用
findPreference(key)
而#2则使用。
So I am requesting feedback - which way is correct? 所以我要求反馈-哪种方法正确?
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) is this the correct way to do it : (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);
}
}
}
At first I thought Option #1 was correct - but the reason I came up with Option #2 is because the first example doesn't use findPreference(key);
一开始我以为Option #1是正确的-但是我想出Option #2的原因是因为第一个示例未使用
findPreference(key);
- which is the entire point of having key
passed within onSharedPreferenceChanged
isn't it? -在
onSharedPreferenceChanged
传递key
的全部意义是吗?
Feedback on this is greatly appreciated! 非常感谢您提供反馈! Thanks!
谢谢!
The key is used to match the visual control with shared preferences. 该键用于使视觉控件与共享的首选项匹配。 This is really a matter for preference.
这确实是一个优先事项。 I prefer to use number 1 since I am not dependent on a view, and makes shared preferences your source of truth.
我更喜欢使用数字1,因为我不依赖于视图,并且使共享的首选项成为事实的来源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.