programing tip

선호 속성 android : dependency의 반대를 수행하는 방법은 무엇입니까?

itbloger 2020. 11. 27. 07:52
반응형

선호 속성 android : dependency의 반대를 수행하는 방법은 무엇입니까?


정확히 반대되는 XML 속성이 android:dependency있습니까?

다른 것이 선택되지 않았을 때 종속 기본 설정을 활성화하고 선택하면 비활성화하기를 바랍니다.

편집 : 아마도 문제가 아닐 android:dependency수도 있습니다. xml 속성을 추가하여 해당 환경 설정에 대한 기본값을 비활성화 한 다음 android:dependency원하는대로 반대 방향으로 전환 할 수 있습니다.

다시 편집 : android:enabled="false"기본 설정 에서 설정 시도했지만 원하는대로 비활성화했지만 다른 기본 설정에 의존하더라도 내가 원하는대로 활성화하지 않았습니다.


실제로 내 스스로 발견했으며 동일한 문제가있을 수있는 모든 사람을 돕기 위해 여기에 게시 할 것이라고 생각했습니다.

android:disableDependentsState="true"

그것을 통제 선호도에 넣으십시오.


Dmytro Zarezenko는 의존하는 기본 설정이 참인 경우 일부 종속성을 활성화하고 해당 기본 설정이 거짓 인 경우 일부를 활성화하려면 어떻게해야하는지 물었습니다.

위에 설명 된 방법을 사용하여 한 유형의 모든 종속 기본 설정 (더 큰 숫자를 가짐)을 설정합니다. 그런 다음 (OnSharedPreferenceChangeListener를 구현하는 클래스와 함께) Preference Activity 및 / 또는 Preference Fragment에 다음과 같은 코드가 있습니다.

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

이것은 XML이 아닌 코드에서이 작업을 수행하는 코드 샘플입니다.

  String eitherKey = "either";
  String orKey = "or";
  CheckBoxPreference either = new CheckBoxPreference(this);
  either.setKey(eitherKey);
  either.setTitle("Either");
  either.setSummary("It is either one or");
  either.setDefaultValue(false);
  either.setDisableDependentsState(true);
  inlinePrefCat.addPreference(either);

  try
  {
     //Crossfade Time
     CheckBoxPreference or = new CheckBoxPreference(this);
     or.setKey(orKey);
     or.setTitle("Or");
     or.setSummary("the other");
     inlinePrefCat.addPreference(or);
     or.setDependency(eitherKey);
  }
  catch (Exception e)
  {
  }

종속 선호도의 값을 변경해야하므로 누군가가 원하는 경우 아래 코드를 게시합니다.

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

너의 ~을 만들어라 PreferenceActivity implement

SharedPreferences.OnSharedPreferenceChangeListener

선언 PreferenceActivity:

SharedPreferences prefs;

초기화 onCreate:

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

공유 환경 설정 변경 리스너에 등록

prefs.registerOnSharedPreferenceChangeListener(this);

Steve가 말한 것과 방법 onResume동일하게하십시오 onPause.

implementation of onSharedPreferenceChanged listener:

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

In this case, I have 2 mutually exclusive Preferences in PreferenceActivity. Call and Record. When both are unchecked, both can be checked, but as user checks one of them, the other becomes disabled (greyed out). As user unchecks the checked preference, the user can check the other one.

On both of them other preferences can depend and that can be worked out with android:dependancy attribute in XML file.

참고URL : https://stackoverflow.com/questions/3591901/how-to-do-opposite-of-of-preference-attribute-androiddependency

반응형