59

我有一個類擴展了PreferenceActivity並顯示了我的應用程序的首選項屏幕。是否可以檢查是否對首選項進行了更改?如何檢測是否在首選項中進行了更改?

這有助於...

http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

其他相關崗位: SharedPreferences.onSharedPreferenceChangeListener not being called consistently


public class PreferenceClass extends PreferenceActivity { 

    OnSharedPreferenceChangeListener listener; 

    public void onCreate(Bundle savedInstanceState) { 
     SharedPreferences prefs = this.getSharedPreferences("settings", 0); 
     listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 

      public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
       int flag = 1; 
      } 
     }; 
     prefs.registerOnSharedPreferenceChangeListener(listener); 
     super.onCreate(null); 
     addPreferencesFromResource(R.xml.settings); 
    } 
} 
+0

我看到太多的方向,這可能取決於你的總體目標可能去。你能否拋出一些關於什麼時候檢查和到底是什麼的細節? – 2011-02-14 22:48:20

+0

@RHughes我只是想每次都做一些改變,只是發現這個鏈接http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being-called-consistently ...仍然無法獲得它工作,雖然...在聽衆的方法永遠不會被調用...任何想法? – mixkat 2011-02-14 23:14:04

+0

沒有看代碼,我只能猜測你正在犯同樣的錯誤,我似乎總是這樣做。我建立一個偉大的傾聽者,然後忘記將它附加到正確的對象。此外,確保您將偵聽器附加到onCreate()方法中的對象,或者至少在您實際需要偵聽器偵聽之前運行的代碼中。 – 2011-02-14 23:38:41

回答

49

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new 
          SharedPreferences.OnSharedPreferenceChangeListener() { 
      @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     // your stuff here 
    } 
}; 

在您的PreferenceActivity中,即使其成爲您的PreferenceActivity類的成員,然後在PreferenceActivity.onCreate()方法中執行registerOnSharedPreferenceChangeListener(spChanged)

這就是我所做的,我從來沒有問題。

否則它是你的錯誤的監聽器中的條件檢查。發佈代碼。

編輯:

從您發佈的代碼,你應該讓prefs類成員變量所以它有一個全局範圍。

而且做prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());而不是getSharedPreferences,因爲您還沒有創建該文件。

要創建一個文件,你需要使用PreferenceManager。要獲得PreferenceManager,請使用Activity.getPreferenceManager()

56

在您的PreferenceActivity類中,實現SharedPreferences.OnSharedPreferenceChangeListener接口。將所需的onSharedPreferenceChanged方法添加到您的班級並在onCreate中註冊。

見樣本代碼在這裏:

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.fw_preferences); //deprecated 
     PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     // handle the preference change here 
    } 

} 
相關問題