Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从EditTextPreference获取更新的文本值-它获取旧值_Android_Android 4.0 Ice Cream Sandwich_Edittextpreference - Fatal编程技术网

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

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

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

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())来检索新值,我会更干净。只是一些关于存储密码的建议:谢谢。在真正的应用程序中,我用一个只有我才能正确生成的可重新生成的值作为它们的前缀,然后在保存之前对整个字符串进行加密。