3

我想在用户从我的preferenceActivity中的ListPreference中选择特定项目时显示一个对话框。但是,我无法使onSharedPreferenceChanged()正常工作。我在方法的开始部分放了一个Toast,但它没有显示,所以这个方法甚至没有完成,为什么?无法在SharedPreferenceChanged()上工作

这里是我的代码:(感谢)

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 

    Toast.makeText(Preferences.this, "prefs Changed", Toast.LENGTH_SHORT) 
      .show(); 

    if (key.equals("boolean_ad_type")) { 

     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
     String value = sharedPreferences.getString("boolean_ad_type", ""); 
     if (value != null && value.equals("Pop-up Ads")) { 

      Toast.makeText(Preferences.this, "Pop-up Ads Selected", 
        Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

我还需要实现它在像这样的活动吗? (我试过有和没有,没有区别)

public class Preferences extends PreferenceActivity 
        implements OnSharedPreferenceChangeListener { 
+0

可能重复[SharedPreferences.onSharedPreferenceChangeListener不被一致调用](http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpr eferencechangelistener-not-being-called-consistent) –

回答

8

onSharedPreferenceChanged not fired if change occurs in separate activity?

public class MyActivity extends PreferenceActivity implements 
    OnSharedPreferenceChangeListener { 

@Override 
protected void onResume() { 
    super.onResume(); 
    // Set up a listener whenever a key changes 
    getPreferenceScreen().getSharedPreferences() 
      .registerOnSharedPreferenceChangeListener(this); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    // Unregister the listener whenever a key changes 
    getPreferenceScreen().getSharedPreferences() 
      .unregisterOnSharedPreferenceChangeListener(this); 
} 
+1

呵呵!我以为我曾尝试过,但它的工作原理!非常感谢! – Jakob

0

你必须设置一个点击监听器要显示在对话框中你onCreate

特定偏好
PreferenceScreen ps2 = (PreferenceScreen) findPreference("ic_vol"); 
    ps2.setOnPreferenceClickListener(this); 
+0

这个不起作用...? –