Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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 PostTextChanged追加不工作_Android_Android Edittext - Fatal编程技术网

Android PostTextChanged追加不工作

Android PostTextChanged追加不工作,android,android-edittext,Android,Android Edittext,出于某种原因,该代码不起作用。我把它简化为它应该是什么的核心。理想情况下,您将看到“1234-5678-1234-5678”作为输出,因为我最多使用16位数字。我将它用于text.setText(s.toString()+“-”),然后在后期运行中,将选择设置为s.length()+1,但append会为您解决这个问题。此外,在setSelection生效之前的几毫秒内,由于setext的原因,您可以判断光标返回到起始位置 为什么不工作?试试这段代码。工作正常 text.addOnTextCha

出于某种原因,该代码不起作用。我把它简化为它应该是什么的核心。理想情况下,您将看到“1234-5678-1234-5678”作为输出,因为我最多使用16位数字。我将它用于
text.setText(s.toString()+“-”)
,然后在后期运行中,将选择设置为
s.length()+1
,但append会为您解决这个问题。此外,在
setSelection
生效之前的几毫秒内,由于
setext
的原因,您可以判断光标返回到起始位置


为什么不工作?

试试这段代码。工作正常

text.addOnTextChanged(new TextWatcher() {

  @Override
  public void afterTextChanged(Editable s) {
      if (s.length() == 4 || s.length() == 9 || s.length() == 14) {
          text.append("-");
      }
  }

}
editText.addTextChangedListener(新的TextWatcher(){


xml edittext声明中的输入类型不应为“数字”。请用如下数字替换输入类型:

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {

            if (arg2 == 0) {
                if (arg0.length() == 4 || arg0.length() == 9
                        || arg0.length() == 14) {
                    editText.append("-");

                }
            } else {
                if (arg0.length() == 4 || arg0.length() == 9
                        || arg0.length() == 14) {
                    editText.append("");

                }
            }

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
    });

不要使用此方法。乍一看它似乎可以正常工作。但是,当您尝试删除(退格)时,将再次调用
posterextchanged
,它将恢复删除所做的更改。只需将输入类型更改为“phone”即可
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {

            if (arg2 == 0) {
                if (arg0.length() == 4 || arg0.length() == 9
                        || arg0.length() == 14) {
                    editText.append("-");

                }
            } else {
                if (arg0.length() == 4 || arg0.length() == 9
                        || arg0.length() == 14) {
                    editText.append("");

                }
            }

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
    });
android:digits="0123456789 -."
private fun setNumberChangeListener(){
    var actionDelete = false
    cardNumber.addTextChangedListener(object : TextWatcher{
        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            actionDelete = after == 0
        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        }

        override fun afterTextChanged(s: Editable?) {
            s?.let {
                when (it.length) {
                    4, 9, 14 -> {
                        if (!actionDelete)
                            it.append(" ")
                        else
                            it.delete(s.lastIndex, s.lastIndex+1.coerceAtMost(s.lastIndex))
                    }
                    else -> {}
                }
            }
        }
    })
}