Android PreferenceFragment - включить / отключить приемник при изменении предпочтений (проблемы контекста и т. Д.)? - PullRequest
0 голосов
/ 06 февраля 2019


Я в процессе интеграции SharedPreferences в код своего приложения.
Я решил использовать Preferences API вместе с PreferenceFragment.
К сожалению, у меняНемного проблем со ссылками на 'context' из Fragment и т. д.
Я также не могу понять, как писать код внутри ChangeListener.

Экран «Настройки / Настройки» выглядит идеально, но у меня возникают проблемы с изменением поведения моего приложения на основе изменения пользователем настроек.

Вот пример..
Моя цель - включить / отключить BroadcastReceiver, когда пользователь изменяет предпочтение:

public class SettingsFragment extends PreferenceFragment {

    public static final String PREF_GPS_STATE_LISTENER = "pref_gpsStateListener";

    private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;

    @Override
    public void onCreate (@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferences);

        final SharedPreferences getPrefs = 
            PreferenceManager.getDefaultSharedPreferences(this.getActivity());

        preferenceChangeListener = 
            new SharedPreferences.OnSharedPreferenceChangeListener() {

            @Override
            public void onSharedPreferenceChanged
                (SharedPreferences sharedPreferences, String key) {

                if (key.equals(PREF_GPS_STATE_LISTENER)) {

                    if (getPrefs.getBoolean(PREF_GPS_STATE_LISTENER)) {

                        context().getApplicationContext()
                        .getPackageManager().setComponentEnabledSetting
                            (component, 
                                PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
                                PackageManager.DONT_KILL_APP);
                    }
                }
            }
        };
    }
}

Вот три проблемы, которые у меня возникают:

(1) - Не могу понять, как правильно ссылаться на «контекст» (в начале кода, используемого для включения BroadcastReceiver).

(2) - Как правильно ссылаться на переменную 'component' (в пределахта же строка кода, что и в предыдущем вопросе)?

(3) - Не думаю, что я правильно написал оператор if и мог бы помочь исправить его.


Любая помощь очень ценится!Мне очень нужна помощь в исправлении этого.
Спасибо:)

...