Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Reverse Preference dependencies [duplicate]

Is there XML attribute that does the exact opposite of android:dependency?

What I would like the dependent preference to be enabled when the other is NOT checked and disabled when it IS checked.

edit: maybe the issue isn't with android:dependency maybe there is an xml attribute that I can add to make the default for that preference disabled and then android:dependency will toggle it the opposite way like i want.

edit again: I tried setting android:enabled="false" in the preference and it disables it like i want but even with it being dependent on the other preference it didn't enable it like i had hoped

like image 958
brybam Avatar asked Aug 28 '10 18:08

brybam


People also ask

How do I add a dependency on Google preference?

Build interactive settings screens without needing to interact with device storage or manage the UI. To add a dependency on Preference, you must add the Google Maven repository to your project. Read Google's Maven repository for more information. Add the dependencies for the artifacts you need in the build.gradle file for your app or module:

How do I add Maven dependencies to preference?

To add a dependency on Preference, you must add the Google Maven repository to your project. Read Google's Maven repository for more information. Add the dependencies for the artifacts you need in the build.gradle file for your app or module: For more information about dependencies, see Add Build Dependencies.

What are the dependencies of preference-KTX?

The preference-ktx dependency now depends on androidx.core:core-ktx:1.1.0 and androidx.fragment:fragment-ktx:1.2.4, mirroring the dependencies of the main preference artifact and ensuring that upgrading preference-ktx updates both the main and -ktx artifacts of transitive dependencies. ( aosp/1277319)

How do you use findpreference in refactored?

Refactored findPreference () to return <T extends Preference> This means that you do not need to explicitly cast Preferences when using findPreference (). For example, EditTextPreference preference = findPreference (“edit_text”) is now valid code.


3 Answers

Actually found it on my own and figured I'd just post it here to help anyone that might have this same issue:

android:disableDependentsState="true"

Put that in the controlling preference.

like image 140
brybam Avatar answered Oct 30 '22 04:10

brybam


Dmytro Zarezenko asked what if you wanted some dependencies to be enabled when the preference on which they depend is true and some to be enabled when that preference is false.

Use the method described above to set the all the dependant preferences of one type (which ever have the greater number). Then (with the class having implements OnSharedPreferenceChangeListener) have code like this in the Preference Activity and/or 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));
    }
}
like image 21
Steve Waring Avatar answered Oct 30 '22 04:10

Steve Waring


This is my code sample for doing this from code and not 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)
  {
  }
like image 44
Justin Avatar answered Oct 30 '22 02:10

Justin