Android - 在 EditText 中更改文本后*做一些事情

标签 android android-edittext textwatcher

我构建了一个 Android 应用程序。我有一个 EditText。我想在用户更改文本后自动保存更改(或其他任何内容)。 现在我用

editText.addTextChangedListener(textWatcher);

  TextWatcher textWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
     ...
    }

但它会在每次小的更改(添加\删除一个字母)后保存更改,我希望它只会在用户完成后保存(关闭键盘,单击不同的编辑文本等)。 我该怎么做?

最佳答案

实现 setOnFocusChangeListeneronFocusChange 并且 hasFocus 有一个 bool 参数。如果这是 false,您就失去了对另一个控件的关注,您应该保存 editext 的数据。例如

 EditText editText= (EditText) findViewById(R.id.editText);

 editText.setOnFocusChangeListener(new OnFocusChangeListener() {          

        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus) {
                //SAVE THE DATA 
            }  

        }
    });

为所有 EditText 实现 setOnFocusChangeListener,您也应该处理 Back Press 事件。如果用户更改了 edittext 的数据并且没有转到另一个 EditText 并按下返回那么编辑的值将不会保存。所以也应该使用 onKeyDownonBackPressed

关于Android - 在 EditText 中更改文本后*做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17207448/

相关文章:

android - 以编程方式创建具有属性 singleLine=true 的 editText

android - EditText.getLocationOnScreen() 为 2 个不同的位置返回相同的结果

java - 如何使用 TextWatcher 更新相同的 EditText?

java - (android textwatcher) 如何在 firebase 上推送 textWatcher

android - 启用 - 通过编程方式禁用 EditText 上的 addTextChangedListener

android - 如何在 2D 中使用 OpenGL ES 的折射功能?

java - 删除 fragment 中的工具栏

Android 编辑文本 : how to apply spans when composing?

android - Delphi RX 中 Android 服务中的 IdHTTP

java - 如何获取 3G 网络的小区 ID?