首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不调用registerOnSharedPreferenceChangeListener

不调用registerOnSharedPreferenceChangeListener
EN

Stack Overflow用户
提问于 2018-10-18 05:42:58
回答 2查看 74关注 0票数 0

既不调用registerOnSharedPreferenceChangeListener()也不调用onSharedPreferenceChanged(),我不知道为什么,我尝试了许多解决方案,但都不起作用

我的PreferenceFragment的代码

代码语言:javascript
复制
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
    addPreferencesFromResource(R.xml.settings);
}

SettingsActivity

代码语言:javascript
复制
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的方法

代码语言:javascript
复制
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);
}

我搜索了很多,使用了很多解决方案,但仍然是一样的,那么我应该怎么做才能让它工作呢?有没有更好的解决方案可以使用?!

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-18 21:47:41

最后它可以工作了,我只需要把我的方法改成这样

代码语言:javascript
复制
 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);
}
票数 0
EN

Stack Overflow用户

发布于 2018-10-18 06:34:29

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档