下面列出了android.preference.PreferenceGroup#getPreference ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
PreferenceScreen preferenceScreen = getPreferenceScreen();
SharedPreferenceListener sharedPreferenceListener = new SharedPreferenceListener();
for(int idPreference = 0; idPreference < preferenceScreen.getPreferenceCount(); idPreference++) {
Preference preference = preferenceScreen.getPreference(idPreference);
if(preference instanceof PreferenceGroup) {
PreferenceGroup preferenceGroup = (PreferenceGroup)preference;
for(int IdGroupReference = 0; IdGroupReference < preferenceGroup.getPreferenceCount(); IdGroupReference++) {
preference = preferenceGroup.getPreference(IdGroupReference);
preference.setOnPreferenceChangeListener(sharedPreferenceListener);
}
} else {
preference.setOnPreferenceChangeListener(sharedPreferenceListener);
}
}
}
private void initGatewayEditTextPreference(Preference preference) {
if (preference instanceof PreferenceGroup) {
PreferenceGroup preferenceGroup = (PreferenceGroup) preference;
for (int i=0; i<preferenceGroup.getPreferenceCount(); i++) {
if (preferenceGroup.getPreference(i).getTitle().equals("Gateway")) {
PreferenceCategory preferenceCategory = (PreferenceCategory) preferenceGroup.getPreference(i);
initGatewayEditTextPreference(preferenceCategory.getPreference(0));
} else {
initGatewayEditTextPreference(preferenceGroup.getPreference(i));
}
}
} else if (preference instanceof EditTextPreference) {
// TODO wrong ClassCastException ?!?!
gatewayEditTextPreference = (GatewayEditTextPreference) preference;
}
}
@Override
public void onResume() {
super.onResume();
for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); ++i) {
Preference preference = getPreferenceScreen().getPreference(i);
if (preference instanceof PreferenceGroup) {
PreferenceGroup preferenceGroup = (PreferenceGroup) preference;
for (int j = 0; j < preferenceGroup.getPreferenceCount(); ++j) {
Preference singlePref = preferenceGroup.getPreference(j);
updatePreference(singlePref, singlePref.getKey());
}
} else {
updatePreference(preference, preference.getKey());
}
}
}
private static PreferenceGroup getParentGroup(PreferenceGroup preferenceGroup, Preference preference) {
for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
Preference childPreference = preferenceGroup.getPreference(i);
if (childPreference == preference) {
return preferenceGroup;
}
if (childPreference instanceof PreferenceGroup) {
PreferenceGroup foundPreferenceGroup = getParentGroup((PreferenceGroup) childPreference,
preference);
if (foundPreferenceGroup != null) {
return foundPreferenceGroup;
}
}
}
return null;
}
@SuppressWarnings("deprecation")
public static Map<Preference, PreferenceGroup> buildPreferenceParentTree(final android.preference.PreferenceActivity activity) {
final Map<Preference, PreferenceGroup> result = new HashMap<>();
final Stack<PreferenceGroup> curParents = new Stack<>();
curParents.add(activity.getPreferenceScreen());
while (!curParents.isEmpty()) {
final PreferenceGroup parent = curParents.pop();
final int childCount = parent.getPreferenceCount();
for (int i = 0; i < childCount; ++i) {
final Preference child = parent.getPreference(i);
result.put(child, parent);
if (child instanceof PreferenceGroup)
curParents.push((PreferenceGroup) child);
}
}
return result;
}
private InputMethodSubtype[] getSubtypes() {
final PreferenceGroup group = getPreferenceScreen();
final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference pref = group.getPreference(i);
if (pref instanceof CustomInputStylePreference) {
final CustomInputStylePreference subtypePref = (CustomInputStylePreference)pref;
// We should not save newly adding subtype to preference because it is incomplete.
if (subtypePref.isIncomplete()) continue;
subtypes.add(subtypePref.getSubtype());
}
}
return subtypes.toArray(new InputMethodSubtype[subtypes.size()]);
}
private InputMethodSubtype[] getSubtypes() {
final PreferenceGroup group = getPreferenceScreen();
final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference pref = group.getPreference(i);
if (pref instanceof CustomInputStylePreference) {
final CustomInputStylePreference subtypePref = (CustomInputStylePreference)pref;
// We should not save newly adding subtype to preference because it is incomplete.
if (subtypePref.isIncomplete()) continue;
subtypes.add(subtypePref.getSubtype());
}
}
return subtypes.toArray(new InputMethodSubtype[subtypes.size()]);
}
private boolean removePreference(@NonNull PreferenceGroup pg,
@NonNull Preference preference) {
for (int i = pg.getPreferenceCount() - 1; i >= 0; i--) {
Preference child = pg.getPreference(i);
if (child == preference) {
pg.removePreference(preference);
return true;
} else if (child instanceof PreferenceGroup) {
if (removePreference((PreferenceGroup) child, preference)) return true;
}
}
return false;
}
/**
* Recursively traverses the tree from the given group as the route and
* tries to delete the preference. Traversal stops once the preference
* was found and removed.
*/
private boolean recursiveDelete(PreferenceGroup group, Preference preference)
{
if (group == null)
{
Log.d(TAG, "attempting to delete from null preference group");
return false;
}
if (preference == null)
{
Log.d(TAG, "attempting to delete null preference");
return false;
}
if (group.removePreference(preference))
{
// Removal was successful.
return true;
}
for (int i = 0; i < group.getPreferenceCount(); ++i)
{
Preference pref = group.getPreference(i);
if (pref instanceof PreferenceGroup)
{
if (recursiveDelete((PreferenceGroup) pref, preference))
{
return true;
}
}
}
return false;
}
private InputMethodSubtype[] getSubtypes() {
final PreferenceGroup group = getPreferenceScreen();
final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference pref = group.getPreference(i);
if (pref instanceof CustomInputStylePreference) {
final CustomInputStylePreference subtypePref = (CustomInputStylePreference)pref;
// We should not save newly adding subtype to preference because it is incomplete.
if (subtypePref.isIncomplete()) continue;
subtypes.add(subtypePref.getSubtype());
}
}
return subtypes.toArray(new InputMethodSubtype[subtypes.size()]);
}
private InputMethodSubtype[] getSubtypes() {
final PreferenceGroup group = getPreferenceScreen();
final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference pref = group.getPreference(i);
if (pref instanceof CustomInputStylePreference) {
final CustomInputStylePreference subtypePref = (CustomInputStylePreference)pref;
// We should not save newly adding subtype to preference because it is incomplete.
if (subtypePref.isIncomplete()) continue;
subtypes.add(subtypePref.getSubtype());
}
}
return subtypes.toArray(new InputMethodSubtype[subtypes.size()]);
}
private InputMethodSubtype[] getSubtypes() {
final PreferenceGroup group = getPreferenceScreen();
final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference pref = group.getPreference(i);
if (pref instanceof CustomInputStylePreference) {
final CustomInputStylePreference subtypePref = (CustomInputStylePreference)pref;
// We should not save newly adding subtype to preference because it is incomplete.
if (subtypePref.isIncomplete()) continue;
subtypes.add(subtypePref.getSubtype());
}
}
return subtypes.toArray(new InputMethodSubtype[subtypes.size()]);
}
private void mapping(PreferenceGroup group) {
for (int i = 0; i < group.getPreferenceCount(); i++) {
Preference preference = group.getPreference(i);
if (preference instanceof PreferenceGroup) {
mapping((PreferenceGroup) preference);
} else {
preference.setOnPreferenceChangeListener(this);
// if (preference instanceof ListPreference) {
// preference.setSummary(((ListPreference) preference).getEntry());
// }
}
}
}
public static List<Preference> getAllPreferences(final PreferenceGroup parent) {
final int preferenceCount = parent.getPreferenceCount();
final List<Preference> results = new ArrayList<>(preferenceCount);
for (int i = 0; i < preferenceCount; i++) {
final Preference preference = parent.getPreference(i);
results.add(preference);
if (preference instanceof PreferenceGroup) {
// recurse
results.addAll(getAllPreferences((PreferenceGroup)preference));
}
}
return results;
}
private static void recursive_notify_all_preference_screens(PreferenceGroup preferenceGroup) {
if (preferenceGroup instanceof PreferenceScreen) {
((BaseAdapter) ((PreferenceScreen) preferenceGroup).getRootAdapter()).notifyDataSetChanged();
} else {
for (int index = 0; index < preferenceGroup.getPreferenceCount(); index++) {
final Preference pref = preferenceGroup.getPreference(index);
if (pref instanceof PreferenceGroup) {
recursive_notify_all_preference_screens((PreferenceGroup) pref);
}
}
}
}
public static List<Preference> getAllPreferences(final PreferenceGroup parent) {
final int preferenceCount = parent.getPreferenceCount();
final List<Preference> results = new ArrayList<>(preferenceCount);
for (int i = 0; i < preferenceCount; i++) {
final Preference preference = parent.getPreference(i);
results.add(preference);
if (preference instanceof PreferenceGroup) {
// recurse
results.addAll(getAllPreferences((PreferenceGroup)preference));
}
}
return results;
}
/**
* Recursive set summaries
*
* @param pg group
*/
private void initSummaries(PreferenceGroup pg) {
for (int i = 0; i < pg.getPreferenceCount(); ++i) {
Preference p = pg.getPreference(i);
if (p instanceof PreferenceGroup)
initSummaries((PreferenceGroup) p);
else
setSummary(p, false);
if (p instanceof PreferenceScreen)
p.setOnPreferenceClickListener(this);
}
}
public void updatePreferenceScreen(PreferenceScreen screen) {
for (int i = 0; i < screen.getPreferenceCount(); ++i) {
Preference preference = screen.getPreference(i);
if (preference instanceof PreferenceGroup) {
PreferenceGroup preferenceGroup = (PreferenceGroup) preference;
for (int j = 0; j < preferenceGroup.getPreferenceCount(); ++j) {
Preference singlePref = preferenceGroup.getPreference(j);
updatePreference(singlePref, singlePref.getKey());
}
} else {
updatePreference(preference, preference.getKey());
}
}
}
protected static boolean removeLeafPreference(final PreferenceGroup root, final Preference preference) {
if (root.removePreference(preference)) return true;
for (int i = 0; i < root.getPreferenceCount(); i ++) {
final Preference child = root.getPreference(i);
if (child instanceof PreferenceGroup && removeLeafPreference((PreferenceGroup) child, preference)) return true;
}
return false;
}
private void initSummaries(PreferenceGroup pg) {
for (int i = 0; i < pg.getPreferenceCount(); ++i) {
Preference p = pg.getPreference(i);
if (p instanceof PreferenceGroup)
this.initSummaries((PreferenceGroup) p);
else
this.setSummary(p, false);
}
}