如何从EditTextPreference获取更新的文本值 - 它获取旧值

时间:2013-06-16 23:49:26

标签: android android-4.0-ice-cream-sandwich edittextpreference

我正在尝试使用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;
        }
    });

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

3 个答案:

答案 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();