调用附加后Textwacher循环

时间:2018-12-18 21:10:18

标签: android

我对TextWatcher有问题。完成编辑后,我想添加“ kg”字符串。但是,当我尝试编辑editView后,它会循环播放,并且我的应用程序崩溃。有人可以帮我吗?谢谢

  

weight = findViewById(R.id.editText);
        weight.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                editable.append(" kg");
            }
        });

3 个答案:

答案 0 :(得分:2)

您可以使用if语句进行管理,但我认为它可以更好地解决

    weight.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable editable) {

            if(!editable.getText().contains("kg"))
               editable.append(" kg");
        }
    });

答案 1 :(得分:0)

它循环,因为设置文本调用afterTextChanged。您可以做的就是删除文本监视程序,更改文本,然后重新添加文本监视程序。

答案 2 :(得分:0)

请按照以下步骤操作:

  1. 暂时删除TextWatcher
  2. 对内容进行更改
  3. 再次添加TextWatcher

    weight.addTextChangedListener(new TextWatcher() {
         @Override
         public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    
         }
    
         @Override
         public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    
         }
    
         @Override
         public void afterTextChanged(Editable editable) {
             if (editable.toString().contains("kg")) return
             weight.removeTextChangedListener(this);
             editable.append(" kg");
             weight.addTextChangedListener(this);
         }
     });