-1

После прочтения Android документации о настройках, у меня есть несколько вопросов о Прослушивании предпочтений меняетсяИспользование Прослушивания предпочтений меняется

«Есть несколько причин, вы можете быть уведомлены, как только использование изменяет одно из предпочтений. Чтобы получить обратный вызов, когда какое-либо изменение происходит с каким-либо одним из предпочтений, реализуйте интерфейс SharedPreference.OnSharedPreferenceChangeListener и зарегистрируйте прослушиватель для объекта SharedPreferences, вызвав registerOnSharedPreferenceChangeListener(). "

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

ресурс: http://developer.android.com/guide/topics/ui/settings.html#Fragment

+0

Предположим, вы измените описание предпочтения внутри вашего параметра предпочтения/фрагмента, как только пользователь изменит что-либо. Тогда вы можете использовать его ... – Opiatefuchs

+0

Если вам это не нужно, не используйте его. – 323go

ответ

0

Вы не обязаны реализовать OnSharedPreferenceChangeListener. Это возможность, которая есть для удобства.

Иногда вы хотите немедленно отреагировать на изменение предпочтений. Например, если у вас есть действие «Настройки», в котором пользователь может, скажем, изменить фоновый цвет действия, тогда, когда пользователь делает выбор, вы хотите, чтобы цвет фона сразу менялся, а не когда пользователь перезагружается активность. Один из способов сделать это - проверить активность фона в onResume(), но другой способ - зарегистрировать OnSharedPreferenceChangeListener в onStart и (отменить его регистрацию в onStop). Я обнаружил, что использование слушателя таким образом иногда может привести к более простому коду. Это также очень помогает, когда код, который должен реагировать на изменение настроек, обычно не участвует в методах жизненного цикла фреймворка.

Реализация OnSharedPreferenceChangeListener довольно проста. Вам просто нужно объявить свой класс implements OnSharedPreferenceChangeListener или реализовать объект, который делает. Например:

public class MyActivity extends Activity { 
    . . . 
    private final OnSharedPreferenceChangeListener mPrefsListener = 
     new OnSharedPreferenceChangeListener() { 
      @Override 
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
                String key) 
      { 
       if (key.equals(IMPORTANT_PREF_KEY)) { 
        setImportantValue(sharedPrefs.getInt(IMPORTANT_PREF_KEY, -1)); 
       } 
      } 
     }; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     PreferenceManager.getDefaultSharedPreferences(this) 
      .registerOnSharedPreferenceChangeListener(mPrefsListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     PreferenceManager.getDefaultSharedPreferences(this) 
      .unregisterOnSharedPreferenceChangeListener(mPrefsListener); 
    } 

    void setImportantValue(int value) { 
     . . . 
    } 
} 
+0

О, я вижу, спасибо, и как я могу это сделать? ресурсы разработчика действительно плохо объясняют это, какой вид деятельности должен реализовывать OnSharedPreferenceChangeListener? активность настроек, которая содержит мой фрагмент? мой фрагмент? или деятельность, которая будет осуществляться путем изменения? – james

+0

@james - я добавил несколько примеров кода. Вы можете использовать 'OnSharedPreferenceChangeListener' в любом коде, который имеет доступ к объекту SharedPreferences. Он не должен быть активностью или фрагментом (хотя обычно они используются там, где они используются). –

+0

Не могли бы вы объяснить строку setImportantValue (sharedPrefs.getInt (IMPORTANT_PREF_KEY, -1))? – james

Смежные вопросы