在首选项更改侦听器 - 单击运行两次后

时间:2016-07-20 15:50:03

标签: java android android-studio android-preferences

我在我的应用程序首选项活动中使用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);

}

我不知道该怎么处理这个奇怪的问题...... 我该怎么办?

1 个答案:

答案 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