0

私はAndroidのSharedPreferencesを使用するアプリを持っています。私は、ListPreferenceが変更されたときにOnSharedPreferenceChangeListenerを使用して何らかのアクションを実行しています。 MainActivityのonStart()メソッドでOnSharedPreferenceChangeListenerを初期化して登録します。 onStop()で登録抹消します。なんらかの理由でそれはまったく動かない。アクティビティのonCreate()に登録して登録を解除したことがないとうまくいくようです。どうしてこれなの?これは、初めてアクティビティを起動して設定を変更しようとしたときに起きているので、onStop()が呼び出されることはなく、リスナーは決して登録抹消されません。関連するコードは以下の通りです:OnSharedPreferenceChangeListenerが意図したとおりに動作しない

private SharedPreferences.OnSharedPreferenceChangeListener prefListener; 
    private SharedPreferences prefs; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scoring); 

     // Initialize our game rules preference to its default value 
     PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 

     setupViews(GameEngine.BAGS_PER_ROUND); 
     startNewGame(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

     prefs = PreferenceManager.getDefaultSharedPreferences(this); 

     prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
      public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
       if (key.equals("game_mode_list")) { 
        startNewGame(); 
        Log.d(TAG, "ListPreference clicked"); 
       } 
      } 
     }; 
     prefs.registerOnSharedPreferenceChangeListener(prefListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     // Unregister changeListener to prevent leaks (although Android uses a weak reference) 
     prefs.unregisterOnSharedPreferenceChangeListener(prefListener); 
    } 
+0

を使用する必要があります(.apply使用しています)、または.commit()を実行して共有設定を更新しますか? –

+0

私は環境設定を更新していません。あなたがリスナーを登録し共有prerenceを変更したときに – intA

+1

onSharedPreferenceChangedにのみトリガされます。ですから、私は、.commit()や.apply()を使って共有のprefファイルを更新するよりも、エディタを手に入れている場所があると思います。私は2つの項目とListPreferenceを持っている私のあるpreferences.xmlで –

答えて

0

getDefaultSharedPreferences()は、アプリのデフォルト設定ファイルを取得します。あなたは(あなたの好みは、あなたがあなた自身をという名前のファイルである場合には、ある)ファイルの変更を聞きしようとしている場合、あなたはgetSharedPreferences(String nameOfFile, int mode)

getSharedPreferences in android docs

関連する問題