首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextWatcher EditText

TextWatcher EditText
EN

Stack Overflow用户
提问于 2018-03-20 18:10:06
回答 2查看 117关注 0票数 0

我在检查EditText方面有问题。我需要用户输入介于1-100之间的值,如果值超过to应该显示,EditText输入应该被刷新。请务必帮助我的ontextChanged部分。应用程序在吐司后崩溃了。任何帮助都将不胜感激。

MainActivity.java

userInput是EditText型的

代码语言:javascript
复制
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);
            }

        }
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-20 18:21:46

在onTextChanged方法中这样做

代码语言:javascript
复制
@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方法中删除实现

票数 0
EN

Stack Overflow用户

发布于 2018-03-20 18:45:32

在@muminers回答之后,您应该将代码放入onTextChangedMethod中,因为即使某些控件更改了editText的值而不直接进行交互,也会调用afterTextChanged方法。它有时会产生一种循环。因此,当您输入编辑文本时,您在afterTextChanged方法中做了一些事情,这间接地改变了相同的编辑文本,然后它进入了一个无限循环,导致应用程序崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49391377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档