programing

선호 속성 안드로이드: 의존성의 반대를 하는 방법?

muds 2023. 10. 3. 11:40
반응형

선호 속성 안드로이드: 의존성의 반대를 하는 방법?

다음과 같은 정반대의 XML 속성이 XML 속성이 있습니까?android:dependency?

다른 것을 선택하지 않았을 때 종속 환경설정을 활성화하고 선택했을 때 비활성화했으면 하는 것.

편집: 문제가 에 있지 않을 수 있습니다.android:dependency기본 설정을 비활성화한 다음 추가할 수 있는 xml 속성이 있을 수 있습니다.android:dependency내가 원하는 것과 반대로 토글할 것입니다.

다시 편집:세팅을 해봤습니다.android:enabled="false"선호도에서는 내가 원하는 것처럼 비활성화되지만 다른 선호도에 의존하더라도 내가 바라던 것처럼 활성화되지 않았습니다.

사실은 제가 직접 찾았고 같은 문제를 가진 사람들을 돕기 위해 여기에 게시해야겠다고 생각했습니다.

android:disableDependentsState="true"

그것을 통제 선호도에 넣습니다.

Dmytro Zarezenko는 의존 관계에 있는 선호도가 참일 때 일부 의존 관계를 활성화하고 일부 의존 관계가 거짓일 때 활성화하려면 어떻게 해야 하는지 물었습니다.

위에서 설명한 방법을 사용하여 한 유형의 종속적인 모든 기본 설정을 설정할 수 있습니다.그러면 (클래스에 OnSharedPreferenceChangeListener가 구현된 경우) Preferences Activity 및/또는 Preferences 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);

스티브의 말대로 하다onResume그리고.onPause방법들.

실시.onSharedPreferenceChanged청취자:

@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개의 상호 배타적 선호를 가지고 있습니다.PreferenceActivity. 통화하고 녹음합니다.둘 다 선택 해제되어 있으면 둘 다 선택할 수 있지만, 사용자가 둘 중 하나를 선택하면 다른 하나는 비활성화(회색 표시)됩니다.선택한 환경설정을 선택 취소하면, 사용자는 다른 환경설정을 확인할 수 있습니다.

두 가지 모두에 따라 다른 선호도가 달라질 수 있으며, 이를 통해 해결할 수 있습니다.android:dependancyXML 파일의 속성입니다.

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

반응형