6

我正在使用TextWatcherEditText当我在其中输入一些内容时,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());

文本观察器

                    @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();
                }
            }
        };
4

2 回答 2

27

创建一个如下所示的 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);
于 2013-10-27T06:49:38.067 回答
5

我通过采用全局布尔变量解决了这个问题。在 onTouchListener 中将此变量设置为 true,并在 afterTextChanged 方法中检查条件是否为 true 或 false。

于 2013-10-27T09:13:08.217 回答