Android - 在EditText中更改*文本后执行某些操作*

Tam*_*arG 14 android textwatcher android-edittext

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

editText.addTextChangedListener(textWatcher);
Run Code Online (Sandbox Code Playgroud)

  TextWatcher textWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
     ...
    }
Run Code Online (Sandbox Code Playgroud)

但是它会在每次微小的更改后保存更改(添加\删除一个字母),我希望它只在用户完成后才能保存(关闭键盘,点击不同的编辑文本等).我怎样才能做到这一点?

Pan*_*mar 22

实施onFocusChangesetOnFocusChangeListener,并有一个为hasFocus一个布尔参数.当这是假的时,你已经失去了对另一个控件的焦点,你应该保存editext的数据.例如

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

 editText.setOnFocusChangeListener(new OnFocusChangeListener() {          

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

实现setOnFocusChangeListener所有EditTexts,你也应该处理Back Press事件.如果用户更改了edittext的数据并且未转到另一个EditText并按下则编辑后的vallue将无法保存.所以应该使用onKeyDown或者onBackPressed也可以


Sko*_*pEN 1

由于 Kotlin 现在是官方 Android 语言:

var editText = findViewById<EditText>(R.id.editText) 

editText.onFocusChangeListener = OnFocusChangeListener { _, hasFocus ->
        if (!hasFocus) { 
           //SAVE THE DATA       
        }
}
Run Code Online (Sandbox Code Playgroud)