没有调用registerOnSharedPreferenceChangeListener

时间:2018-10-17 21:42:58

标签: android sharedpreferences

registerOnSharedPreferenceChangeListener()onSharedPreferenceChanged()都没有被调用,我不知道为什么,我尝试了很多解决方案,但没有任何效果

我的PreferenceFragment的代码

public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
    addPreferencesFromResource(R.xml.settings);
}

SettingsActivity

public class SettingsActivity extends AppCompatActivity {

private Toolbar mSettingsToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    mSettingsToolbar=findViewById(R.id.toolbarSettings);

    setSupportActionBar(mSettingsToolbar);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id=item.getItemId();
    if(id==android.R.id.home){
        NavUtils.navigateUpFromSameTask(this);
    }
    return super.onOptionsItemSelected(item);
}

这是我设置sharedPreferenced

的方法
private void setupSharedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    autoplay =  sharedPreferences.getBoolean(getString(R.string.autoplay_checkbox_key),getResources().getBoolean(R.bool.autoplay_checkbox_pref));
    sharedPreferences.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
    Toast.makeText(MainActivity.this,""+autoplay,Toast.LENGTH_SHORT).show();

    onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            if(key.equals(R.string.autoplay_checkbox_key)){
                autoplay=sharedPreferences.getBoolean(key,getResources().getBoolean(R.bool.autoplay_checkbox_pref));
                Toast.makeText(MainActivity.this,""+autoplay,Toast.LENGTH_SHORT).show();
            }
        }
    };
}

@Override
protected void onDestroy() {
    super.onDestroy();
    PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
}

我进行了很多搜索并使用了许多解决方案,但仍然是相同的,因此我应该怎么做才能使其正常工作? ,有没有更好的解决方案?

预先感谢

2 个答案:

答案 0 :(得分:0)

看不到完整的代码,但以下几行有效:

private OnSharedPreferenceChangeListener listener;  //listener is a class field instance

listener= new SharedPreferences.OnSharedPreferenceChangeListener() {//instantiate listener
      @Override
        public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
            //implementation goes here
        }
};
prefs.registerOnSharedPreferenceChangeListener(listener); //then register it

答案 1 :(得分:0)

最终可以正常工作,我只需要将方法更改为此

 private void setupSharedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    autoplay =  sharedPreferences.getBoolean(getString(R.string.autoplay_checkbox_key),getResources().getBoolean(R.bool.autoplay_checkbox_pref));

    onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            if(key==getString(R.string.autoplay_checkbox_key))
                autoplay=PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(getString(R.string.autoplay_checkbox_key)
                        ,getResources().getBoolean(R.bool.autoplay_checkbox_pref));

        }
    };
    PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
}