Как сделать, противоположность предпочтения приписывает android:dependency?

Есть ли атрибут XML, который делает полную противоположность android:dependency?

Что я хотел бы, чтобы зависимое предпочтение было включено, когда другой НЕ проверен и отключен, когда оно проверяется.

править: возможно, проблема не с android:dependency возможно, существует атрибут XML, который я могу добавить для создания значения по умолчанию для того предпочтения отключенным и затем android:dependency переключит это противоположный путь как, я хочу.

отредактируйте снова: Я пытался установить android:enabled="false" в предпочтении и это отключает его как, я хочу, но даже с ним являющийся зависящим от другого предпочтения он не включил его как, я надеялся

62
задан 28 August 2010 в 22:28

3 ответа

Сделайте Ваш PreferenceActivity implement

SharedPreferences.OnSharedPreferenceChangeListener

, объявляют в PreferenceActivity:

SharedPreferences prefs;

инициализируют в onCreate:

SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(this); prefs = sPrefs;

и регистр на общем предпочтении изменяются, слушатель

prefs.registerOnSharedPreferenceChangeListener(this);

делают то же, как Steve сказал в onResume и onPause методы.

реализация [1 111] слушатель:

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Log.d("SettingsActivity","onSharedPreferenceChanged LISTENER FIRED");
    if (key.equals(getString(R.string.key_call))) {
        //if call true
        if (sharedPreferences.getBoolean(getString(R.string.key_call), false)) {
            Preference preference = findPreference(getString(R.string.key_record));
            preference.setEnabled(false);
        } else { // if call false
            Preference preference = findPreference(getString(R.string.key_record));
            preference.setEnabled(true);
        }
    }
    if (key.equals(getString(R.string.key_record))) {
        //if record true
        if (sharedPreferences.getBoolean(getString(R.string.key_record), false)) {
            Preference preference = findPreference(getString(R.string.key_call));
            preference.setEnabled(false);
        } else { // if record false
            Preference preference = findPreference(getString(R.string.key_call));
            preference.setEnabled(true);
        }
    }
}

В этом случае, у меня есть 2 взаимоисключающих Предпочтения в [1 112]. Звоните и Запись. Когда оба неконтролируемы, оба могут быть проверены, но поскольку пользователь проверяет, что один из них, другой становится отключенным (greyed). Поскольку пользователь снял флажок с проверенным предпочтением, пользователь может проверить другой.

На них обоих другие предпочтения могут зависеть, и это может быть разработано с [1 113] атрибут в XML-файле.

0
ответ дан 31 October 2019 в 13:39

Я должен изменить значение зависимого предпочтения, таким образом, я отправляю свой код ниже, если кто-либо хочет сделать это:

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
    if(preference.getKey().equals("key_a")) {
        ((CheckBoxPreference)findPreference("key_b").setChecked(false);
    }
    return super.onPreferenceTreeClick(preferenceScreen, preference);
}
0
ответ дан 31 October 2019 в 13:39

Dmytro Zarezenko спросил что, если Вы хотели, чтобы некоторые зависимости были включены, когда предпочтение, от которого они зависят, верно и некоторые, чтобы быть включенным, когда то предпочтение является ложью.

Использование метод описал выше для установки всех подчиненных предпочтений одного типа (которые когда-либо имеют большее число). Затем (с классом, имеющим реализации OnSharedPreferenceChangeListener), имеют код как это в Предпочтительном Фрагменте Действия и/или Предпочтения:

@Override
public void onResume()
{
    super.onResume();
    sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause()
{
    super.onPause();
    sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
    if (key.equals("pref_that_they_depend-upon")
    {
        // Iterate over the preferences that need to be enabled or disabled,
        // lets say there is just one called the_awkward_one.
        Preference preference = findPreference("the_awkward_one");
        // Or preference.setEnabled(! sharedPreferences.getBoolean(("pref_that_they_depend-upon", defaultValue));
        preference.setEnabled(sharedPreferences.getBoolean(("pref_that_they_depend-upon", defaultValue));
    }
}
8
ответ дан 31 October 2019 в 13:39

Другие вопросы по тегам:

Похожие вопросы: