既不调用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);
}
我搜索了很多,使用了很多解决方案,但仍然是一样的,那么我应该怎么做才能让它工作呢?有没有更好的解决方案可以使用?!
提前感谢
发布于 2018-10-18 21:47:41
最后它可以工作了,我只需要把我的方法改成这样
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);
}
发布于 2018-10-18 06:34:29
看不到您的完整代码,但以下代码行有效:
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
https://stackoverflow.com/questions/52864054
复制相似问题