检查是否已打开SettingsActivity中的切换

时间:2017-12-06 19:49:30

标签: android preferencefragment

如果在SettingsActivity中打开/关闭开关,我该如何检查我的MainActivity。我想检查开关是否打开,如果是,我想做点什么。如何保存此首选项并在重新启动应用程序时保持相同?

以下是我的SettingsActivity的一部分,带有开关

static int audio;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_general);
        setHasOptionsMenu(true);

        bindPreferenceSummaryToValue(findPreference("example_text"));
        bindPreferenceSummaryToValue(findPreference("example_list"));

        Preference switchPref = (Preference) findPreference("audio_switch");

        switchPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object o) {

                boolean isOn = (boolean) o;

                if (isOn) {
                    audio = 1;


                }else{
                    audio = 0;

                }
                    return true;
                }
            });
        }

2 个答案:

答案 0 :(得分:0)

我通常会做以下事情:

保存设置 (将其放入您在设置活动中单击按钮或某事时调用的save()方法)

SharedPreferences options = 
getSharedPreferences("optionsPreference", 
contextOfSettings.MODE_PRIVATE);
options.edit().putString("key", "value").apply();

要执行此操作,您需要在设置活动

中添加此项

作为设置中的全局变量

public static Context contextOfSettings;

此onCreate of settings

中的方法
@Override
protected void onCreate {
contextOfSettings = getApplicationContext();
}

然后在某个地方键入设置上下文,然后按alt + enter导入它,将其导入主活动中 像这样:

import com.SettingsActivity.contextOfSettings;

然后,您可以在创建MainActivity时获取已保存的值(即使您关闭应用程序仍会保存)

SharedPreferences options = getSharedPreferences("optionsPreference", contextOfSettings.MODE_PRIVATE);
String savedValue = options.getString("key", "defaultValue");

此String可以具有值true和false,您可以使用checkBox.isChecked()结合if语句设置

答案 1 :(得分:0)

您正在正确保存偏好设置值,即使您从onPreferenceChangeListener 返回true 来存储新值。

 Preference switchPref = (Preference) findPreference("audio_switch");

    switchPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object o) {

            boolean isOn = (boolean) o;

            if (isOn) {
                audio = 1;
            }else{
                audio = 0;
            }

                 //* Set true to update the state of the Preference with the new value!
                return true;
            }

        });
    }

关闭应用程序时正确保存该值,如果要检查可从首选项中读取的值

   //Check the current value in preference.
   SharedPreferences switchPrefStatus = PreferenceManager.getDefaultSharedPreferences(getActivity());
   boolean switchPrefValue = switchPrefStatus.getBoolean("audio_switch", false);
   Toast.makeText(getActivity(), "Current value: " + switchPrefValue, Toast.LENGTH_SHORT).show();

以下是PreferenceFragment with PreferenceFragment的完整示例:

enter image description here