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

标签 android android-edittext

我在 EditText 上使用 TextWatcher 。当我在 edittext 中输入内容时,它工作得很好,但是当我将数据设置到 edittext 时 从数据库获取 NullPointerException。我在这个 Edittext 上使用了 onTouchListener。我的问题是。 我可以检查 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();
                }
            }
        };

最佳答案

像下面这样创建一个 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);

关于android - 如何在将数据设置为 edittext 时禁用 TextWatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19615373/

相关文章:

android - BottomSheet 中的 RecyclerView 未按预期工作

java - 在 Android 应用程序中打开网页

java - 通过 TestFairy 部署 Android App 时出现异常

android - 我可以在 android :imeOptions ="actionSearch"? 上写我自己的事件吗

java - EditText - setText() 方法不起作用 - StackOverFlow 异常

android - 为什么 BitmapFactory 将我的图像缩小 1.333 倍而不是 2 倍?

android - 用户选择返回时的事件?

android - 布局在屏幕旋转时复制自身

android - 禁用在editText android中输入

java - 从android中的另一个类加载纹理