web-dev-qa-db-ja.com

設定属性Android:dependencyの反対を行う方法は?

Android:dependencyとは正反対のXML属性はありますか?

もう一方がチェックされていない場合は依存設定を有効にし、ISチェックされている場合は無効にする)を希望します。

編集:問題はAndroid:dependencyにないかもしれません。おそらく、その設定のデフォルトを無効にするために追加できるxml属性があり、Android:dependencyは私が望むように反対の方法でそれを切り替えます。

もう一度編集:設定でAndroid:enabled="false"を設定しようとしましたが、希望どおりに無効になりましたが、他の設定に依存していても、期待どおりに有効になりませんでした

62
brybam

実際に自分で見つけて、同じ問題を抱えている可能性のある人を助けるためにここに投稿するだけだと思いました:

Android:disableDependentsState="true"

それを制御設定に入れます。

127
brybam

Dmytro Zarezenkoは、依存するプリファレンスがtrueの場合にいくつかの依存関係を有効にし、そのプリファレンスがfalseの場合にいくつかの依存関係を有効にするかどうかを尋ねました。

上記の方法を使用して、1つのタイプ(どちらか大きい方)のすべての依存設定を設定します。次に(OnSharedPreferenceChangeListenerを実装するクラスを使用して)PreferenceActivityおよび/またはPreferenceFragmentに次のようなコードがあります。

@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
Steve Waring

これは、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)
  {
  }
1
Justin

依存する設定の値を変更する必要があるので、誰かがこれをしたい場合は、以下にコードを投稿します。

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

PreferenceActivityimplementを作成します

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

この場合、PreferenceActivityに2つの相互に排他的な設定があります。通話と録音。両方のチェックを外すと、両方をチェックできますが、ユーザーが一方をチェックすると、もう一方が無効になります(グレー表示)。ユーザーがチェックされた設定のチェックを外すと、ユーザーはもう一方の設定をチェックできます。

それらの両方で、他の設定が依存する可能性があり、XMLファイルの_Android:dependancy_属性を使用して解決できます。

0
Primož Majhen