2012-02-06 2 views
0

Я пересматриваю предупреждения после изменения свойств. Мне нужно прочитать различные переменные. Проблема в том, что когда я запускаю функцию из OnPreferenceChangeListener, эта функция видит старое значение предпочтения.Android - очередь событий - выполнение после настройки предпочтения

Я хотел бы сделать что-то, что я знаю из разработки AWT/Swing: добавить команду в очередь событий, чтобы она выполнялась после обработанных событий пользовательского интерфейса, а также после завершения операции изменения предпочтений. Проблема в том, что ... Я не нашел ничего похожего на EventQueue в Android. Я нашел только операцию runOnUiThread, которая мне не нужна, потому что согласно спецификации команда будет немедленно выполнена, если мы уже находимся в потоке пользовательского интерфейса.

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

+0

«Проблема в том, когда я запускаю функцию от OnPreferenceChangeListener, эта функция видит старое значение предпочтения ". - этого не должно быть. – CommonsWare

+0

Это так, потому что этот слушатель может отменить изменение, поэтому он совершается после завершения этого метода –

+0

'OnSharedPreferenceChangeListener' не может« отменить изменение ». – CommonsWare

ответ

1

В моем случае я использовал неправильный OnPreferenceChangeListener используется во время фазы изменения предпочтений, зарегистрирован по одному предпочтению и должен использоваться для проверки значения привилегий.

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

PreferenceManager.getDefaultSharedPreferences(this) 
     .registerOnSharedPreferenceChangeListener(
      new OnSharedPreferenceChangeListener() { 

     public void onSharedPreferenceChanged(
       SharedPreferences sharedPreferences, String key) { 
      if (MYKEY1.equals(key) 
        || MYKEY2.equals(key)) { 
       doSomething(); 
      } 
     } 
    }); 
Смежные вопросы