我正在尝试使用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;
}
});
我花了一些时间试图让它工作,但找不到任何好的解决方案。如何在用户按下确定后重新检索新输入的文本。
答案 0 :(得分: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;
}
});
答案 1 :(得分: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
答案 2 :(得分:0)
password.getText
无法获取更新后的值。使用:
String password = newValue.toString();