【问题标题】:Check if switch from SettingsActivity is on检查来自 SettingsActivity 的开关是否打开
【发布时间】:2017-12-06 19:49:29
【问题描述】:

如果在 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;
                }
            });
        }

【问题讨论】:

    标签: android preferencefragment


    【解决方案1】:

    您正在正确保存首选项值,即使您从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的完整示例:

    【讨论】:

    • 我必须在哪里粘贴SharedPreferences switchPrefStatus = PreferenceManager.getDefaultSharedPreferences(getActivity()); boolean switchPrefValue = switchPrefStatus.getBoolean("audio_switch", false); Toast.makeText(getActivity(), "当前值:" + switchPrefValue, Toast.LENGTH_SHORT).show();我没有片段活动或它的名称。只需设置活动和 Mainactivity。我应该在哪里粘贴代码
    • @100Awesome 当你的应用启动时,在你的启动器活动的 onCreate() 方法中:)
    • 当我在其中粘贴该代码时,两个 getActivity 单词会变成红色。
    • 你的类必须继承Activity或者AppCompatActivity,你的类是不是Activity,看例子:github.com/Jorgesys/Android-SwitchPreference/blob/master/app/…
    • 这不是我想要的,当您单击 3 个点并转到常规时,我希望开关在 SettingsActivity 中,而不是在 MainActivity 中。我需要的只是从 SettingsActivity 中检索变量 audio 并查看 Mainactivity if audio = 1
    【解决方案2】:

    我通常会做以下事情:

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

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

    为此,您需要在设置活动中添加它

    作为设置中的全局变量

    public static Context contextOfSettings;
    

    而且这个方法在你的 onCreate 的设置中

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

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

    【讨论】:

    • 我应该把代码放在哪里来保存我的设置?我把它放在 SettingsActivity 的任何地方,它总是使 contextOfSettings 变红。我都不知道把第二个代码放在哪里。我把它放在 SettingsActivity 的任何地方,它都会用红色强调@Override,说明此处不允许注释。
    • 上下文应该是一个全局变量,你在onCreate方法中设置值。并确保导入 android.content.Context;
    • 或者,如果您的问题是“我应该将代码放在哪里来保存我的值?”,我会创建一个按钮,该按钮调用一个新方法 save(),该方法检索开关值并将它们放入共享偏好
    • 我想要的只是用 if 语句检查 SettingsActivity 中的开关是否打开,仅此而已,我是编码新手,我不知道将所有代码放在哪里,它总是使东西变红
    • 我已经编辑了我的帖子并试图解释把所有东西放在哪里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2012-08-03
    相关资源
    最近更新 更多