2015-11-21 4 views
1

В моей основной деятельности я хотел бы послушать изменения, внесенные в настройку «Настройки». Я используюПрослушать изменения предпочтений

SharedPreferences prefs = 
      PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    SharedPreferences.OnSharedPreferenceChangeListener listener = 
      new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
      //implement here -> but this peace of code is never called 
     } 
    }; 
    prefs.registerOnSharedPreferenceChangeListener(listener); 

Но слушателя никогда не называют. В моем приложении SettingsActivity я использую сгенерированный код из шаблона Android Studio. Например,

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class GeneralPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_general); 
     setHasOptionsMenu(true); 
     bindPreferenceSummaryToValue(findPreference("my_list")); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      startActivity(new Intent(getActivity(), SettingsActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Как это исправить?

+0

Вы сказали, что вы установили слушателя в MainActivity, но этот фрагмент фактически является частью SettingsActivity, поэтому, я думаю, вы должны установить вместо этого listener в SettingsActivity? – ehehhh

+0

IDK, какое предпочтение вы изменяете в фрагменте (iirc, определенное в xml), но есть больше, чем просто 'DefaultSharedPreferences'. Может быть, вы слушаете изменения в неправильных предпочтениях? – zapl

+0

@ehehhh: Второй сегмент кода относится к параметру SettingsActivity. Первый из MainActivity. Я хочу знать об изменениях в MainActivity, поэтому я могу настроить его при изменении настройки. –

ответ

0

Вам необходимо удержать ссылку своего слушателя в вашем приложении SettingsActivity. SharedPreferences относится только к слабой ссылке, что означает, что ваш слушатель не вызван.