Как отключить SwitchPreference, если другой SwitchPreference отключен? - PullRequest
0 голосов
/ 22 декабря 2018

Я работаю над настройками активности моей игры.У меня есть раздел уведомлений, где пользователь может включить уведомления и включить вибрацию.

Я хочу отключить вибрацию SwitchPreference, если уведомления SwitchPreference отключены.Я попытался android:dependancy, но все, что делает, это размытие SwitchPreference вместо отключения вибрации.

Это то, что находится внутри pref_main.xml

<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>

У меня есть активность настроек и appcompatpreferenceacctivityфайл.Эти три файла управляют настройками.Что мне делать в каждом файле, чтобы отключить вибрацию при отключенных уведомлениях?

Редактировать: вот код для MainPreferenceFragment для действия настройки

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;
                    }
                });

            }
        }
    }

1 Ответ

0 голосов
/ 22 декабря 2018

Вы можете сделать это, фиксируя изменения вашего первого Switch и изменив значение второго:

 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;
                }
            });

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...