如何在将数据设置为edittext时禁用TextWatcher

时间:2013-10-27 06:43:54

标签: android android-edittext

我在TextWatcher上使用EditText。当我在edittext中输入内容时,它完美无缺,但是当我从数据库中将数据设置为edittext时获取NullPointerException 。我在onTouchListener上使用了Edittext。我的问题是。 如果触摸事件为真,我可以检查TextWatcher是否有效的条件。

EditText det=(EditText) findViewById(R.id.det);
    det.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            System.out.println(v.getId());
            d_id=v.getId();
            if (event.getAction() == MotionEvent.ACTION_UP) {
                getPopUp(det);
            }
            return false;
        }
    });

当我在det上调用setText时,它转到TextWatcher

det.setText(ft.get_det().toString());

TextWatcher

                    @Override
            public void afterTextChanged(Editable string) {
                try {

                    int rp=0;
                    det=(EditText)findViewById(d_id);
                    s_id=d_id-4;
                    sev=(EditText)findViewById(s_id);
                    o_id=d_id-2;
                    occ=(EditText)findViewById(o_id);
                    rp=d_id+1;
                    rpn=(TextView)findViewById(rp);
                    if (sev.getText().length() > 0
                            || occ.getText().length() > 0
                            || sev.getText().length() == 0) {
                        if (string.length() > 0) {
                            int s, o, d, r;
                            System.out.println(sev.getId());
                            System.out.println(det.getId());
                            s = Integer.parseInt(sev.getText().toString());
                            o = Integer.parseInt(occ.getText().toString());
                            d = Integer.parseInt(det.getText().toString());
                            r = s * o * d;
                            String m = r + "";
                            rpn.setText(m);                         
                        } else {
                            // det.setText("");
                            // rpn.setText("");
                             System.out.println("In else");
                        //  makeToast();
                        }
                    }

                } catch (Exception e) {
                    det.setText("");
                    rpn.setText("");
                    System.out.println("IN Exception");
                    makeToast();
                }
            }
        };

2 个答案:

答案 0 :(得分:21)

创建一个TextWatcher,如下所示

TextWatcher textWatcher=new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    };

然后将其添加到EditText调用

   EditText.addTextChangedListener(textWatcher);

并删除电话

   EditText.removeTextChangedListener(textWatcher);

答案 1 :(得分:2)

我通过获取一个全局布尔变量来解决这个问题。在onTouchListener中将此变量设为true 并检查afterTextChanged方法中的条件,即if变量为true。