2011-07-30 12 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(); 
    } 
} 

私はあなたのコードを知っていないと申し訳ありませんが、私は完全に間違っているかもしれませんが、あなたがそれを投稿したとして、それがないこと私にはかなり似ています。

EDIT:

はまた、あなたが好みに変更を加える際に必ずSharedPreferences.Editor.commit()メソッドを呼び出して作っていますか?

+0

私はそれを変更しましたが、依然としてリスナーは呼び出されません。 – noloman

+0

@noloman:OK、私の後の編集を参照してください。 – Squonk

+0

いいえ私はそれをしません、どこでそれをしますか?onSharePreferenceChangedListenerの中で? – noloman

関連する問題