2013-10-07 3 views
1

Я беру настройки IP, Port и Device Name у пользователя и использую их при инициализации объекта. Однако, когда я устанавливаю настройки, эти настройки не обновляются в приложении, пока я не перезапущу приложение.Предпочтения не обновляются до перезапуска приложения

Вот мои Настройки Файл-

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     addPreferencesFromResource(R.layout.settings); 

     SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); 
     EditTextPreference editTextPrefLAN = (EditTextPreference) findPreference("prefABCLan"); 
     editTextPrefLAN 
       .setSummary(sp.getString("prefABCLan", "Set your LAN IP")); 





     EditTextPreference editTextPrefPort = (EditTextPreference) findPreference("prefABCPort"); 
     editTextPrefPort 
       .setSummary(sp.getString("prefABCPort", "Set your port")); 
     EditTextPreference editTextPrefDeviceName = (EditTextPreference) findPreference("prefABCDeviceName"); 
     editTextPrefDeviceName 
       .setSummary(sp.getString("prefABCDeviceName", "Set your device name")); 

     /*EditTextPreference editTextPrefScopeIP = (EditTextPreference) findPreference("prefScopeIP"); 
     editTextPrefScopeIP 
       .setSummary(sp.getString("prefScopeIP", "Set your Scope IP")); 
     EditTextPreference editTextPrefScopeLogin = (EditTextPreference) findPreference("prefScopeLogin"); 

*/ 


    } 

    protected void onResume() { 
     super.onResume(); 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 
    } 

    protected void onStop() { 
     super.onStop(); 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 
    } 

    protected void onPause() { 
     super.onPause(); 
     getPreferenceScreen().getSharedPreferences() 
       .unregisterOnSharedPreferenceChangeListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.actionbar, menu); 

     return true; 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
              String key) { 
     Preference pref = findPreference(key); 
     if (pref instanceof EditTextPreference) { 
      EditTextPreference etp = (EditTextPreference) pref; 
      pref.setSummary(etp.getText()); 
     } 
    } 

Что мне нужно сделать в моем коде?

+0

Во-первых, как вы определяете, что «эти настройки не обновляются в приложении»? Во-вторых, есть ли у вас какие-либо атрибуты 'android: process' в вашем манифесте? – CommonsWare

+0

@CommonsWare Первоначально я вводил неправильный IP-адрес в своем приложении. Затем я изменяю, чтобы исправить IP и отправлять данные из другого действия внутри приложения, которое использует эти префы. Но Activity по-прежнему использует Old Prefs вместо New Prefs. И снова, если я перезапущу свое приложение, данные будут отправлены с использованием новых настроек. –

+0

@CommonsWare, почему мне нужна запись процесса в манифесте? –

ответ

1

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

Один подход заключается просто перезагрузить предпочтения, наложив свое предпочтение чтения логики в методе жизненного цикла, как onResume(), который будет называться как когда активность/фрагмент создается и, когда он возвращается на экран после того, как пользователь посетил PreferenceActivity.

Другой подход заключается в использовании OnSharedPreferenceChangeListener в других компонентах, так же, как вы используете его здесь. Действия (или фрагменты или что-то еще), которые заботятся об изменениях предпочтений, регистрируют OnSharedPreferenceChangeListener и следят за соответствующими изменениями.

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