Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Preference somePreference = findPreference(SOME_PREFERENCE_KEY);
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- preferenceScreen.removePreference(somePreference);
- preferenceScreen.addPreference(somePreference);
- <?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
- <CheckBoxPreference
- android:key="pref_sync"
- android:title="@string/pref_sync"
- android:summary="@string/pref_sync_summ"
- android:defaultValue="true" />
- <ListPreference
- android:dependency="pref_sync"
- android:key="pref_syncConnectionType"
- android:title="@string/pref_syncConnectionType"
- android:dialogTitle="@string/pref_syncConnectionType"
- android:entries="@array/pref_syncConnectionTypes_entries"
- android:entryValues="@array/pref_syncConnectionTypes_values"
- android:defaultValue="@string/pref_syncConnectionTypes_default" />
- </PreferenceScreen>
- public class RemovablePreference extends Preference {
- @Override
- protected void onBindView(View view) {
- super.onBindView(view);
- updateVisibility(); // possibly a better place available?
- }
- private void updateVisibility() {
- Context context = getContext(); // should be a PreferenceActivity
- if (context instanceof PreferenceActivity) {
- updateVisibility((PreferenceActivity)context);
- }
- }
- private void updateVisibility(PreferenceActivity activity) {
- updateVisibility(getPreferenceScreen(activity));
- }
- private PreferenceScreen getPreferenceScreen(PreferenceActivity activity) {
- if (activity.getPreferenceScreen() != null) {
- return activity.getPreferenceScreen(); // for old implementations
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- Fragment fragment = activity.getFragmentManager().findFragmentById(android.R.id.content);
- if (fragment instanceof PreferenceFragment) {
- return ((PreferenceFragment) fragment).getPreferenceScreen();
- }
- }
- return null;
- }
- private void updateVisibility(PreferenceScreen screen) {
- if (!isVisible() && screen != null) {
- hidePreference(screen, this);
- }
- }
- private boolean hidePreference(PreferenceGroup prefGroup, Preference removedPreference) {
- boolean removed = false;
- if (prefGroup.removePreference(removedPreference)) {
- removed = true;
- }
- for (int i = 0; i < prefGroup.getPreferenceCount(); i++) {
- Preference preference = prefGroup.getPreference(i);
- if (preference instanceof PreferenceGroup) {
- PreferenceGroup prefGroup2 = (PreferenceGroup)preference;
- if (hidePreference(prefGroup2, this)) {
- // The whole group is now empty -> remove also the group
- if (prefGroup2.getPreferenceCount() == 0) {
- removed = true;
- prefGroup.removePreference(prefGroup2);
- }
- }
- }
- }
- return removed;
- }
- protected boolean isVisible() {
- return true; // override
- }
- <PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:key="preferenceScreen">
- <PreferenceCategory
- android:key="personalisation"
- android:title="your title here">
- <ThemedPreference
- android:key="animation" />
- </PreferenceScreen>
- PreferenceScreen pPreferenceScreen = (PreferenceScreen) findPreference("preferenceScreen");
- PreferenceCategory pCategory = (PreferenceCategory) findPreference("personalisation");
- ThemedPreference pThemePref = (ThemedPreference) findPreference("animation");
- pPreferenceScreen.removePreference(pCategory); //remove category
- pCategory.removePreference(pThemePref); // remove preference
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement