如何检测是否在首选项中进行了更改?
我有一个扩展PreferenceActivity的类,并显示我的应用程序的首选项屏幕。 是否可以检查是否对首选项进行了更改?
这有助于…
http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
其他相关的文章: SharedPreferences.onSharedPreferenceChangeListener不被一致调用
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); } }
做
SharedPreferences.OnSharedPreferenceChangeListener spChanged = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // your stuff here } };
在PreferenceActivity
,即使其成为PreferenceActivity
类的成员,然后在PreferenceActivity.onCreate()
方法中执行registerOnSharedPreferenceChangeListener(spChanged)
。
这就是我所做的,我从来没有问题。
否则,这是你的有条件的检查过程中的错误。 发布代码。
编辑:
从你发布的代码中,你应该使prefs
成为一个类成员variables,因此它具有全局作用域。
并做prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
而不是getSharedPreferences
因为您还没有创build该文件。
要创build一个文件,你需要使用PreferenceManager
。 要获得PreferenceManager
,请使用Activity.getPreferenceManager()
。
在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 } }
从官方文档:
阅读首选项 >收听首选项更改