首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果禁用了另一个SwitchPreference,如何禁用另一个SwitchPreference?

如果禁用了另一个SwitchPreference,如何禁用另一个SwitchPreference?
EN

Stack Overflow用户
提问于 2018-12-22 07:02:07
回答 1查看 889关注 0票数 0

我正在处理我的游戏的设置活动。我有一个通知部分,用户可以在其中启用通知和振动。

如果通知SwitchPreference被禁用,我想禁用振动SwitchPreference。我尝试过android:dependancy,但它所做的只是模糊了SwitchPreference,而不是禁用振动。

这是pref_main.xml内部的内容

代码语言:javascript
复制
<PreferenceCategory android:title="@string/pref_title_notifications">
    <SwitchPreference
        android:defaultValue="true"
        android:key="@string/enable_notifications"
        android:title="@string/title_enable_notifications" />

    <RingtonePreference
        android:defaultValue="content://settings/system/notification_sound"
        android:dependency="enable_notifications"
        android:key="@string/key_ringtone"
        android:ringtoneType="notification"
        android:summary="@string/default_ringtone"
        android:title="@string/title_ringtone" />

    <SwitchPreference
        android:defaultValue="true"
        android:key="@string/key_vibrate"
        android:title="@string/title_vibrate" />
</PreferenceCategory>

我有一个设置活动和一个appcompatpreferenceactivity文件。这三个文件控制设置。当通知被禁用时,我应该如何在每个文件中禁用振动?

编辑:以下是用于设置活动的MainPreferenceFragment的代码

代码语言:javascript
复制
public static class MainPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref_main);

            // EditText Listeners
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_full_name)));
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_username)));
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_birthday)));
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_email)));

            // notification preference change listener
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_ringtone)));

            private SwitchPreferenceCompat enableNotifications;
            private SwitchPreferenceCompat keyRingtone;

            @Override
            public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
                setPreferencesFromResource(R.xml.root_preferences, rootKey);
                enableNotifications = findPreference("enable_notifications");
                keyRingtone = findPreference("key_ringtone");

                enableNotifications.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                    @Override
                    public boolean onPreferenceChange(Preference preference, Object newValue) {
                        keyRingtone.setChecked(((boolean) newValue));
                        return true;
                    }
                });

            }
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2018-12-22 07:49:38

您可以通过捕获第一个Switch上的更改并更改第二个and的值来完成此操作:

代码语言:javascript
复制
 public static class MainPreferenceFragment extends PreferenceFragment {

        private SwitchPreference enableNotifications;
        private SwitchPreference keyRingtone;

        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref_main);

            // EditText Listeners
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_full_name)));
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_username)));
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_birthday)));
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_email)));

            // notification preference change listener
            bindPreferenceSummaryToValue(findPreference(getString(R.string.key_ringtone)));

            enableNotifications = findPreference("enable_notifications");
            keyRingtone = findPreference("key_ringtone");

            enableNotifications.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    keyRingtone.setChecked(((boolean) newValue));
                    return true;
                }
            });

        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53891677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档