2010-12-03 2 views
5

У меня есть ListPreference, и оно имеет значение по умолчанию, и оно отлично работает. У меня также есть предпочтение, которое сбрасывает все общие настройки, которые отлично работают. Проблема в том, что если вы вернетесь в ListPreference, он все равно покажет старое значение. Если вы полностью выйдете из настроек и вернетесь, это будет правильно отображаться.Как заставить команду listPreference сбросить значение?

Итак, вопрос в том, как я могу заставить ListPreference использовать правильное значение? Кажется, что все остальные предпочтения работают нормально.

Я нашел работу, но я не доволен ею, поскольку она кажется мне грязной. Когда пользователь нажимает на сброс, после того, как значения сброшены, я сам установил значение для значения, которое оно уже установлено.

((ListPreference) findPreference(myListKey)).setValue(String.valueOf(DEFAULT_VALUE)); 

Заранее спасибо.

ответ

0

Я думаю, что вы должны переопределить метод onSetInitialValue из ListPreference. вот так.

общественного класса CustomListPreference расширяет ListPreference {

защищен недействительным onSetInitialValue (булево restoreValue, объект DefaultValue) {

// когда он alreay инициализации или не ваше значение параметра если (restoreValue) {

} еще {// установить его defautlValue

}

}

}

1

Я знаю, что его поздно, но, возможно, кто-то наткнуться на это может оказаться полезным.

Preference reset = (Preference) findPreference("reset"); 
reset.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

    public boolean onPreferenceClick(Preference preference) { 
    // TODO Auto-generated method stub 
    preference.getEditor().clear().commit(); 
     Toast.makeText(getBaseContext(), 
       "Restored to default settings", Toast.LENGTH_SHORT) 
       .show(); 
     return false; 
     } 
    }); 
+2

@ user1780619 не работает для меня вообще - это не отмените выбор списка – likejiujitsu 2014-05-01 21:03:25

0
ListPreference pref = (ListPreference) findPreference ("yeeha"); 

pref.setValue(null); 
0

У меня была аналогичная проблема, чтобы установить свой список категорий в ListPreference. Проблема заключается в том, что вы не можете изменить видимые параметры в диалоговом окне со списком методом setEntries (установка записей на прослушивателе кликов слишком поздно).

Решение для меня добавляло DrawerListener, который сообщает My PreferenceFragment, когда он должен аннулировать действие.

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

final MainOptionsFragment fragment = (MainOptionsFragment) getFragmentManager(). 
      findFragmentById(R.id.fragment_drawer); 

mDrawerOptions = new DrawerLayout.SimpleDrawerListener() { 
    @Override 
    public void onDrawerOpened(View drawerView) { 
     super.onDrawerOpened(drawerView); 
     fragment.onOpened(); 
    } 
}; 

mDrawerLayout.addDrawerListener(mDrawerOptions); 

Другое решение перезаписать метод onPrepareDialogBuilder, в котором будут определены записи перед диалог подготовлен.

class CustomListPreference extends ListPreference { 
    @Override 
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
     // TODO setEntries 
     super.onPrepareDialogBuilder(builder); 
    } 
} 
1

Азизи Муса на что-то, но null будет выдавать исключение.

Это работало, однако:

ListPreference yeeha = (ListPreference) findPreference ("yeeha"); 

yeeha.setValue(""); 
Смежные вопросы