Android - Preferences API onSharedPreferenceChanged - Какой путь является правильным? - PullRequest
0 голосов
/ 18 февраля 2019

Я использую Preferences-API для реализации настроек в моем приложении.
Я решил использовать PreferenceFragment.

Мой PreferenceFragment содержит мой код onSharedPreferenceChanged.
Тем не менее, для одного из моих Preferences я не уверен, каким путем можно достичь своей цели.
Цель: на основе TogglePreference либо включить, либо отключить мой приемник.

НижеЯ включил 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);

    }
}
}

(ИЛИ) это правильный способ сделать это:


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);

    }
}
}

Сначала я подумал, что Option # 1 правильный, но причина, по которой я выбрал Option # 2 , заключается в том, что первый пример не't use findPreference(key); - в этом вся суть key, переданного в onSharedPreferenceChanged, не так ли?

Мы очень ценим обратную связь!Спасибо!

1 Ответ

0 голосов
/ 18 февраля 2019

Клавиша используется для сопоставления визуального элемента управления с общими настройками.Это действительно вопрос предпочтений.Я предпочитаю использовать номер 1, поскольку я не зависим от представления и делю общие предпочтения вашим источником правды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...