首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅限用户输入的EditText addTextChangedListener

仅限用户输入的EditText addTextChangedListener
EN

Stack Overflow用户
提问于 2015-10-21 19:17:03
回答 1查看 13K关注 0票数 7

我有一个监听文本变化的EditText:

代码语言:javascript
复制
editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}

        @Override
        public void afterTextChanged(Editable s) {
            // do stuff
        }
    });

到目前为止,这个方法工作得很好,如果我在EditText中输入一些内容,afterTextChanged()中的内容就会被执行。现在,在同一个活动中,我有一个可以更改EditText中的字符串的ToggleButton。如何防止由于触发"afterTextChanged“的ToggleButton而导致此文本更改?

PS:不确定这是否相关,但具体来说,我有一个接受小数或小数(例如"0.75“或"3/4")的EditText,切换按钮应该在小数和小数显示之间切换,但不应该触发"afterTextChanged”中的任何东西,因为值保持不变(3/4=0.75)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 19:23:36

在我看来,有两种可能性:

注册/注销listener

  • Flag

标志示例:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity{
    boolean automaticChanged = false;
    ToggleButton toggleButton;
    EditText editText;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            //...
            toggleButton.setOnClickListener(onClickListener);
            editText.addTextChangedListener(textWatcher);
            //...
        }

        TextWatcher textWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (!automaticChanged) {
                    // do stuff
                } else {
                    automaticChanged = false;
                }
            }
        };

        View.OnClickListener onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                automaticChanged = true;
                // do stuff
            }
        };
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33257937

复制
相关文章

相似问题

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