Android PreferenceFragment-在首选项更改(上下文问题等)下启用/禁用接收器?

时间:2019-02-06 18:17:48

标签: android android-fragments sharedpreferences android-preferences android-context


我正在将SharedPreferences集成到我的App代码中。.
我选择使用Preferences APIPreferenceFragment
不幸的是,在context等内部引用“ Fragment”时遇到了一些麻烦。
我也不太清楚如何在ChangeListener中编写代码。

“设置/首选项”屏幕看起来很完美,但是在用户更改首选项的基础上,我在更改App的行为方式时遇到问题。

这里是一个例子。
我的目标是在用户更改首选项时启用/禁用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语句,并且可以使用帮助来更正它。


任何帮助深表感谢!我非常需要帮助解决此问题。
谢谢:)

0 个答案:

没有答案