public abstract class PreferenceGroup extends Preference implements GenericInflater.Parent<Preference> {
* Preference列表,里面的元素默认情况下根据Preference的order排序。
* 添加的时候,请使用addPreference,而不要直接使用List#add方法。
*/
private List<Preference> mPreferenceList;
private boolean mOrderingAsAdded = true;
* 添加Preference到List
*/
public boolean addPreference(Preference preference) {
if (mPreferenceList.contains(preference)) {
return true;
}
if (preference.getOrder() == Preference.DEFAULT_ORDER) {
if (mOrderingAsAdded) {
preference.setOrder(mCurrentPreferenceOrder++);
}
}
synchronized(this) {
int insertionIndex = Collections.binarySearch(mPreferenceList, preference);
if (insertionIndex < 0) {
insertionIndex = insertionIndex * -1 - 1;
}
mPreferenceList.add(insertionIndex, preference);
}
preference.onAttachedToHierarchy(getPreferenceManager());
preference.assignParent(this);
if (mAttachedToActivity) {
preference.onAttachedToActivity();
}
notifyHierarchyChanged();
return true;
}
public boolean removePreference(Preference preference) {
final boolean returnValue = removePreferenceInt(preference);
notifyHierarchyChanged();
return returnValue;
}
private boolean removePreferenceInt(Preference preference) {
synchronized(this) {
preference.onPrepareForRemoval();
if (preference.getParent() == this) {
preference.assignParent(null);
}
return mPreferenceList.remove(preference);
}
}
* Finds a {@link Preference} based on its key.
*/
public Preference findPreference(CharSequence key) {
if (TextUtils.equals(getKey(), key)) {
return this;
}
final int preferenceCount = getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) {
final Preference preference = getPreference(i);
final String curKey = preference.getKey();
if (curKey != null && curKey.equals(key)) {
return preference;
}
if (preference instanceof PreferenceGroup) {
final Preference returnedPreference = ((PreferenceGroup)preference)
.findPreference(key);
if (returnedPreference != null) {
return returnedPreference;
}
}
}
return null;
}
@Override
protected void onAttachedToActivity() {
super.onAttachedToActivity();
mAttachedToActivity = true;
final int preferenceCount = getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) {
getPreference(i).onAttachedToActivity();
}
}
}