1

我正在尝试使用 EditTextPreference 设置新密码。在此 Android 4.0.3 中,单击 EditTextPreference 会打开一个对话框窗口,用户可以在其中输入文本。但是,按确定后,它仍然显示旧文本值,而不是新输入的值。

public class MyPreferencesActivity extends PreferenceActivity {

EditTextPreference edp_password = (EditTextPreference) findPreference("pref_key_account_password");

edp_password.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
        public boolean onPreferenceChange(Preference preference, Object newValue) {
             String password = edp_password.getText();
            Log.v(TAG, "Password is: " + password);
            return true;
        }
    });

我花了一段时间试图让它工作,但找不到任何好的解决方案。用户按确定后如何检索新输入的文本。

4

3 回答 3

2

试试这个方法:

EditTextPreference pref_dayCount = (EditTextPreference)findPreference("pref_dayCount");
pref_dayCount.setDefaultValue(30);
pref_dayCount.setSummary(getResources().getString(R.string.pref_plan_days_number_summary)+" "+pref_dayCount.getText());
pref_dayCount.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
            preference.setSummary(getResources().getString(R.string.pref_plan_days_number_summary)+" "+newValue.toString());    
        return true;
    }
});
于 2014-02-07T04:54:30.503 回答
0

password.getText不会得到更新的值。利用:

String password = newValue.toString();
于 2014-09-05T07:02:40.990 回答
0

好的,我想我知道问题出在哪里,从 android 开发人员的参考资料中,它说这个回调是在内部状态更新之前调用的,所以我猜这就是为什么你会看到旧值。

你这样做的方式很好,但我猜你需要使用 newValue 对象,也许是这样的:

public class MyPreferencesActivity extends PreferenceActivity {

EditTextPreference edp_password = (EditTextPreference)       findPreference("pref_key_account_password");

edp_password.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
    public boolean onPreferenceChange(Preference preference, Object newValue) {

        Log.v(TAG, "Password is: " + (EditText)newValue.getText());
        return true;
    }
});

我不确定这是否有效,我只是免费写它:P

于 2013-06-17T00:01:19.577 回答