文本观察者编辑文本



我在检查EditText时遇到问题。我需要用户输入 1-100 之间的值,如果值超过,则应显示 toast,并且应刷新 EditText 输入。请帮我处理文本更改的部分。吐司后应用程序崩溃。任何帮助将不胜感激。

主要活动.java

用户输入的类型为编辑文本

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
            progress.setText(" "+i);
        }
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });
    userInput.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) {
            try {
                int j = Integer.valueOf(userInput.getText().toString());
                if(j > 100 || j < 1){
                    Toast.makeText(getApplicationContext(), "Please enter value between 1-100", Toast.LENGTH_SHORT).show();
                }
            } catch(NumberFormatException e) {
                //do whatever you like when value is incorrect
            }
        }
        @Override
        public void afterTextChanged(Editable editable) {
            String text = editable.toString();
            if (!TextUtils.isEmpty(text)) {
                seekBar.setProgress(Integer.parseInt(text));
            }
            else {
                seekBar.setProgress(0);
            }
        }
    });

在 onTextChanged 方法中执行此操作

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    try {
        int j = Integer.valueOf(userInput.getText().toString());
        if(j > 100 || j < 1){
             Toast.makeText(getApplicationContext(), "Please enter value between 1-100", Toast.LENGTH_SHORT).show();
             userInput.setText("")
        } else {
             seekBar.setProgress(j);
        }
    } catch(NumberFormatException e) {
        //do whatever you like when value is incorrect
    }
}

并从 afterTextChanged 方法中删除实现

按照@muminers答案,您应该将代码放在 onTextChangedMethod 中,因为即使某些控件在没有直接交互的情况下更改了 editText 的值,也会调用 afterTextChanged 方法。它有时会创建一种循环。因此,当您在编辑文本中输入某些内容时,您在 afterTextChanged 方法中执行了一些操作,该方法间接更改了相同的编辑文本,然后它进入无限循环,导致应用程序崩溃。

相关内容

  • 没有找到相关文章

最新更新