添加onTextChanged实现后清除EditText文本

son*_*876 13 android android-layout

我正在为EditText字段添加一个监听器,以便将数字实时格式化为货币.

        loanText.addTextChangedListener(new TextWatcher() {
        private String current = "";
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(!s.toString().equals(current)){
               String cleanString = s.toString().replaceAll("[$,.]", "");

               double parsed = Double.parseDouble(cleanString);
               String formated = NumberFormat.getCurrencyInstance().format((parsed/100));

               current = formated;
               loanText.setText(formated);
               loanText.setSelection(formated.length());
            }
        }
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

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

但是,当我尝试清除EditView字段时,我的应用程序将崩溃.此外,退格键不再起作用.

jam*_*mes 20

问题是,你TextWatcher认为你是"清算"的文本,因此请求将关闭其回调方法(afterTextChanged,beforeTextChanged等).

我所做的就是简单地删除TextWatcher,清除文本,并添加TextWatcher回到EditText.这样,没有什么能听我的EditText改变.

你可能不得不TextWatcher像以前那样坚持一个实例而不是内联它.这样你每次想要清除时都不必创建一个EditText

  1. loanText.removeTextChangedListener(yourTextWatcherObject);
  2. loanText.setText("");
  3. loanText.addTextChangedListener(yourTextWatcherObject);

  • 我建议使用一个布尔变量来控制监听器是否应该做任何事情. (4认同)