我在我的应用程序首选项活动中使用EditTextPreference,我添加了这个,以检测edittext中的文本何时更改。所有工作,除此之外,代码总是运行两次...我试图添加System.out.println("now");
以证明代码运行两次,并且它“写入”两次......
以下是代码:
SharedPreferences.OnSharedPreferenceChangeListener myPrefListner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.admin_activity);
myPrefListner = new SharedPreferences.OnSharedPreferenceChangeListener(){
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
switch(key) {
case "prefAddUser":
EditTextPreference connectionPref = (EditTextPreference) findPreference(key);
String jmeno = connectionPref.getText();
System.out.println("now");
add_user(jmeno); //custom method to add user to MySQL database
Toast.makeText(getApplicationContext(), "add user", Toast.LENGTH_SHORT).show();
connectionPref.setText("");
break;
}
}
};
}
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(myPrefListner);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(myPrefListner);
}
我不知道该怎么处理这个奇怪的问题...... 我该怎么办?
答案 0 :(得分:2)
在匿名类中调用OnSharedPreferenceChangeListener
使其成为垃圾收集的目标
一旦离开当前范围,就可以在空上下文中调用unregisterOnSharedPreferenceChangeListener()
。
在类范围内实现它,如下所示:
public class SettingsActivity extends PreferenceActivity
implements OnSharedPreferenceChangeListener {
public static final String KEY_PREF_SYNC_CONN = "pref_syncConnectionType";
...
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(KEY_PREF_SYNC_CONN)) {
Preference connectionPref = findPreference(key);
// Set summary to be the user-description for the selected value
connectionPref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
阅读下一个教程以获得进一步说明:
1. Good So answer on the subject
2.官方文件here