Android 如何从EditTextPreference获取更新的文本值-它获取旧值
我正在尝试使用EditTextPreference设置新密码。在Android 4.0.3中,单击EditTextPreference会打开一个对话框窗口,用户可以在其中输入文本。但是,按ok时,它仍然显示旧文本值,而不是新输入的值Android 如何从EditTextPreference获取更新的文本值-它获取旧值,android,android-4.0-ice-cream-sandwich,edittextpreference,Android,Android 4.0 Ice Cream Sandwich,Edittextpreference,我正在尝试使用EditTextPreference设置新密码。在Android 4.0.3中,单击EditTextPreference会打开一个对话框窗口,用户可以在其中输入文本。但是,按ok时,它仍然显示旧文本值,而不是新输入的值 public class MyPreferencesActivity extends PreferenceActivity { EditTextPreference edp_password = (EditTextPreference) findPreferenc
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;
}
});
我花了一段时间试图让它工作,但找不到任何好的解决办法。在用户按下Ok之后,我如何检索新输入的文本。Ok我想我知道问题所在,从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试试这样:
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;
}
});
password.getText
将不会获取更新的值。使用:
String password = newValue.toString();
这确实有助于我目前的处境。也谢谢你发布代码。TextWatcher是我的备份选项,我以前用过一次,但因为它会监视每个按键的行程,这是不必要的,所以我想用一种更优雅的方式来实现这一点,也就是说,在按下Ok后,你只需获得最终输入。但是,如果没有其他办法,我会接受你的答案作为最终答案。也许这会鼓励我扩展代码,使其成为AJAX类型的密码检查。好吧,我想我知道问题是什么,从android开发者的参考资料中,它说这个回调是在内部状态更新之前调用的,所以我猜这就是为什么你会看到旧值。你是对的,我也读到了。但我想知道,应该有一种方法来获得文本更改后更新的内容。我还需要添加一些EditTextPreferences,如果使用一些更简单的代码(如getText())来检索新值,我会更干净。只是一些关于存储密码的建议:谢谢。在真正的应用程序中,我用一个只有我才能正确生成的可重新生成的值作为它们的前缀,然后在保存之前对整个字符串进行加密。