2011-07-30 48 views
0

我在我的活动中有一些偏好,我希望实现这一点,根据这些偏好,某些服务将启动或不启动。 我试图实施和onSharedPreferenceChanged方法,但它永远不会被调用(即使我已将它分配给一个字段)。 代码如下:Android偏好已更改

public class MtprojectActivity extends Activity { 
... 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     prefs = PreferenceManager.getDefaultSharedPreferences(this); 
callsCheckbox = prefs.getBoolean("callsLogChk", true); 
listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
      @Override 
      public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
       if (!started) { 
        startCallsService(); 
        bindCallsService(); 
       } else { 
        releaseCallsService(); 
        stopCallsService(); 
       } 
      } 
     }; 

     prefs.registerOnSharedPreferenceChangeListener(listener); 

非常感谢提前!

回答

0

你确定它没有被调用,或者它只是它没有做你期望的事情吗?我可能是错的,但不应该代码看起来是这样的...

if (key.equals("callsLogChk")) { 
    if (!started) { // Check NOT started ??? 
     startCallsService(); 
     bindCallsService(); 
    } 
    else { // The 'else' should compliment the check for !started ??? 
     releaseCallsService(); 
     stopCallsService(); 
    } 
} 

对不起,我不知道你的代码,我可能是完全错误的,但因为你已经贴吧,它不看起来相当适合我。

编辑:

而且,你要确保你调用SharedPreferences.Editor.commit()方法,当你做出改变偏好?

+0

是的我改变了它,但仍然听者永远不会被调用 – noloman

+0

@noloman:好的,看看我后来的编辑。 – Squonk

+0

不,我不这样做,我应该在onSharePreferenceChangedListener里面做什么? – noloman