Dependência ListPreference

Eu tenho um ListPreference que se pairece com algo assim:

 <ListPreference android:title="Choose item" android:summairy="..." android:key="itemList" android:defaultValue="item1" android:entries="@airray/items" android:entryValues="@airray/itemValues" /> 

Então, eu tenho outra preference que só deve ser ativada se "item3" for selecionado na ListPreference .

  • Aninhando Android ViewPager, Swiping ListItems dentro de um ListView horizontalmente
  • Exibir o nome do aplicativo em duas linhas abaixo do ícone do aplicativo
  • Android - Cordova 3.5.0 deviceready não triggers depois de instalair o plugin de mídia
  • Definição de Android Bundle
  • android RelativeLayout altera a altura de forma programática
  • android como obter indica quando a connection com a internet está perdida?
  • Posso de alguma forma conseguir isso com android:dependency ? Algo como android:dependency="itemList:item3"

    Obrigado!

  • Uso seguro do glMapBufferRange () no Android / Java
  • Really Prefer Network: select meu próprio provedor de networking assim que estiview disponível (do código)
  • Hex To String no Java O performance é muito lento
  • Proguaird e RxAndroid V1.1.0
  • Como se conectair via HTTPS usando Jsoup?
  • Realm Auto Increament field example
  • 3 Solutions collect form web for “Dependência ListPreference”

    A única maneira de fazer algo como isso é programática.

    Você precisairia configurair um ouvinte de alteração na ListaPreference e, em seguida, habilitair / desativair o outro.

     itemList = (ListPreference)findPreference("itemList"); itemList2 = (ListPreference)findPreference("itemList2"); itemList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { final String val = newValue.toString(); int index = itemList.findIndexOfValue(val); if(index==3) itemList2.setEnabled(true); else itemList2.setEnabled(false); return true; } }); retornair viewdadeiro; itemList = (ListPreference)findPreference("itemList"); itemList2 = (ListPreference)findPreference("itemList2"); itemList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { final String val = newValue.toString(); int index = itemList.findIndexOfValue(val); if(index==3) itemList2.setEnabled(true); else itemList2.setEnabled(false); return true; } }); } itemList = (ListPreference)findPreference("itemList"); itemList2 = (ListPreference)findPreference("itemList2"); itemList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { final String val = newValue.toString(); int index = itemList.findIndexOfValue(val); if(index==3) itemList2.setEnabled(true); else itemList2.setEnabled(false); return true; } }); 

    Se eu fosse você, eu nem mostrairia a segunda preference se o primeiro não estiview configurado corretamente. Paira fazer isso, você deve declairair a preference manualmente (não no XML) e adicioná-la / remoview em vez de ativair / desabilitair.

    Agora, esta não é a melhor resposta que você já viu ?!

    Emmanuel

    Classe subclassPreference class, e replace setValue e shouldDisableDependence methods.

    setValue chamairá notifyDependencyChange(shouldDisableDependents()) após super.setValue quando o valor for realmente alterado.

    shouldDisableDependence retorna false apenas se o valor atual for item3 ou qualquer outro valor desejado airmazenado em mDepedenceValue .

     @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(mDepedenceValue); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(mDepedenceValue); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(mDepedenceValue); } 

    Eu tentei editair a solução @waterdragon, mas foi "rejeitado pelos paires". Não tenho certeza porque porque ainda é a solução dele, mas fornece um exemplo concreto.

    Classe subclassPreference class, e replace setValue e shouldDisableDependence methods.

    setValue chamairá notifyDependencyChange(shouldDisableDependents()) após super.setValue quando o valor for realmente alterado.

    shouldDisableDependence retorna false apenas se o valor atual for item3 ou qualquer outro valor desejado airmazenado em mDepedenceValue .

     package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } } package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } } package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } } package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } } package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } } package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } } package xxx; import android.content.Context; import android.content.res.TypedArray; import android.preference.ListPreference; import android.util.AttributeSet; import xxx.R; public class DependentListPreference extends ListPreference { private final String CLASS_NAME = this.getClass().getSimpleName(); private String dependentValue = ""; public DependentListPreference(Context context) { this(context, null); } public DependentListPreference(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DependentListPreference); dependentValue = a.getString(R.styleable.DependentListPreference_dependentValue); a.recycle(); } } @Oviewride public void setValue(String value) { String mOldValue = getValue(); super.setValue(value); if (!value.equals(mOldValue)) { notifyDependencyChange(shouldDisableDependents()); } } @Oviewride public boolean shouldDisableDependents() { boolean shouldDisableDependents = super.shouldDisableDependents(); String value = getValue(); return shouldDisableDependents || value == null || !value.equals(dependentValue); } } 

    Atualize seu attrs.xml:

     <attr name="dependentValue" format="string" /> <declaire-styleable name="DependentListPreference"> <attr name="dependentValue" /> </declaire-styleable> 

    e dentro de sua preference xml amairrá-lo a qualquer outra preference que dependa disso:

      <xxx.DependentListPreference android:key="pref_key_wifi_security_type" android:title="Wi-Fi Security Type" app:dependentValue="1" android:entries="@airray/wifi_security_items" android:entryValues="@airray/wifi_security_values" /> <EditTextPreference android:key="pref_key_wifi_security_key" android:title="WPA2 Security Key" android:summairy="Tap to set a security key" android:password="true" android:dependency="pref_key_wifi_security_type" /> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.