Очистить SharedPreferences из элемента экрана настроек - PullRequest
0 голосов
/ 27 июня 2011

У меня есть живые обои на рынке прямо сейчас с множеством настраиваемых опций. Недавно мой друг попросил меня добавить кнопку сброса, чтобы вернуть их все к значениям по умолчанию. Я добавил кнопку на экран настроек через XML, но не могу очистить настройки. Вот код, который я использую:

getPreferenceManager().findPreference("default").setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference preference) {
            AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
            alertDialog.setMessage("Are you sure you want to reset all settings to default?");
            alertDialog.setCancelable(true);
            alertDialog.setButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    SharedPreferences settings =  PreferenceManager.getDefaultSharedPreferences(getBaseContext());                          
                    SharedPreferences.Editor editor = settings.edit();
                    editor.clear();
                    editor.commit();
                } }); 
            alertDialog.setButton2("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                } }); 
            alertDialog.show();
            return false;
        }
    });

AlertDialog всплывает, щелкая «Нет», отменяет окно, но нажатие «Да» закрывает окно без очистки настроек. Что я должен изменить, чтобы очистить их? Спасибо, ребята!

РЕДАКТИРОВАТЬ: небольшое обновление, добавив

Log.d("test" , settings.getAll().toString());

До и после очистки / фиксации возвращает {} оба раза. Поэтому я думаю, что храню свои предпочтения каким-то странным образом или что-то в этом роде

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Хорошо, я понял это. Я сохранял настройки с именем myPrefs, поэтому вместо вызова PreferenceManager.GetDefaultSharedPreferences я вызвал getPreferenceManager (). GetSharedPreferences (). Спасибо за помощь, Кенни!

0 голосов
/ 27 июня 2011

Вы пытались использовать editor.apply(); вместо коммита? Это будет хорошо работать до тех пор, пока вы вызываете его в основном потоке, и ничто другое не пытается выполнить commit ().

apply () немедленно фиксирует свои изменения в SharedPreferences в памяти, но запускает асинхронную фиксацию на диск, поэтому вы не будете уведомлены о любых сбоях.

...