我試圖編輯@waterdragon解決方案,但它是「同伴拒絕」。不知道爲什麼,因爲它仍是他的解決方案,但提供了一個具體的例子
子類ListPreference
類,並覆蓋setValue
和shouldDisableDependence
方法。
setValue
將在super.setValue
後調用notifyDependencyChange(shouldDisableDependents())
實際更改值。
shouldDisableDependence
僅噹噹前值爲item3或存儲在mDepedenceValue
中的任何其他所需值時才返回false。
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();
}
}
@Override
public void setValue(String value) {
String mOldValue = getValue();
super.setValue(value);
if (!value.equals(mOldValue)) {
notifyDependencyChange(shouldDisableDependents());
}
}
@Override
public boolean shouldDisableDependents() {
boolean shouldDisableDependents = super.shouldDisableDependents();
String value = getValue();
return shouldDisableDependents || value == null || !value.equals(dependentValue);
}
}
更新您的attrs.xml:
<attr name="dependentValue" format="string" />
<declare-styleable name="DependentListPreference">
<attr name="dependentValue" />
</declare-styleable>
和內部自己的喜好XML把它綁依賴於它的任何其他偏好:
<xxx.DependentListPreference
android:key="pref_key_wifi_security_type"
android:title="Wi-Fi Security Type"
app:dependentValue="1"
android:entries="@array/wifi_security_items"
android:entryValues="@array/wifi_security_values" />
<EditTextPreference
android:key="pref_key_wifi_security_key"
android:title="WPA2 Security Key"
android:summary="Tap to set a security key"
android:password="true"
android:dependency="pref_key_wifi_security_type" />
我會去上肢體並說這是我見過的最可怕的答案。 – 2012-03-07 14:56:14
@Emmanuel:itemList和itemList2變量應聲明爲final。無論如何,我投了票,因爲你的回答對我很好! – 2012-08-13 16:37:40
是否有可能讓itemList2依賴* hidden *布爾值(首選項不會顯示在首選項屏幕上),然後在上面的代碼中將該隱藏值設置爲true或false?效果是一樣的,但我認爲如果你有很多喜好取決於itemList(而不是一個),它會稍微方便一些。如果可能的話,你怎麼能隱藏這個值? – Malabarba 2013-04-17 14:51:38