简体   繁体   English

Android EditText事件侦听器

[英]Android EditText event listeners

I am using onTextChanged() for EditText and onKey() event handler. 我使用EditTextonKey()事件处理程序的onTextChanged() I want to handle onTextChanged() when text is entered and onKey() when text is deleted ie i want to handle the KEYCODE_DEL . 我想在输入文本时处理onTextChanged() ,而在删除文本时处理onKey() ,即我想处理KEYCODE_DEL But my onTextchanged() event always fires. 但是我的onTextchanged()事件总是会触发。 Anyone can post me some ideas. 任何人都可以向我发布一些想法。

ed.setOnKeyListener(this); 
ed. addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
   //
});
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {    
if (keyCode == KeyEvent.KEY CODE_ENTER) {
// 
});

I solved the issue by writing the whole logic inside the TextWatcher() using all of its callbacks as onKeyListener will not be fired for SoftKeyBoard for Nexus Devices. 我通过使用所有回调在TextWatcher()内部编写整个逻辑来解决了该问题,因为Nexus设备的SoftKeyBoard不会触发onKeyListener。 I am posting the code which may be helpful for others 我发布的代码可能对其他人有帮助

    ed.addTextChangedListener(new TextWatcher() {
                private String previousDigits, num;
                private boolean textChanged = false;

                @Override
                public void onTextChanged(CharSequence currentDigits, int start,
                        int before, int count) {
                    if (!(previousDigits.equalsIgnoreCase(currentDigits.toString()))) {
                        textChanged = true;
                        num = getStrippedNumber(currentDigits
                                .toString());
                                            //getStrippedNumber method is used for getting the numeric digits from the string.
                        if (num.length() > 6) {
                            num = ("(" + num.substring(0, 3) + ") "
                                    + num.substring(3, 6) + "-" + num.substring(6));
                        } else if (num.length() > 3) {
                            num = ("(" + num.substring(0, 3) + ") " + num
                                    .substring(3));
                        }
                    }
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    previousDigits = s.toString();
                }

                @Override
                public void afterTextChanged(Editable s) {
                    if (textChanged) {
                        textChanged = false;
                        mEditPhoneNo.setText(num);
                        mEditPhoneNo.setSelection(mEditPhoneNo.getText().length());
                    }
                }
            });

    Thanks Guyz

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM