Android TextWatcher不会连续使用两个编辑文本

时间:2016-06-13 10:49:00

标签: java android

我只想这样做如果我输入等级然后它将根据输入的等级更改为点数字段并且如果我输入一个点然后它将根据输入的点改变等级。我为editText添加了textChangeListener,但是当我输入内容时,我的应用程序只是没有响应。

http://i.stack.imgur.com/50LYo.png

grade.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) {

                if (grade.getText().toString().equals("A+"))
                {
                    points.setText("4.00");
                }
                else if (grade.getText().toString().equals("A"))
                {
                    points.setText("3.75");
                }
                else if (grade.getText().toString().equals("A-"))
                {
                    points.setText("3.50");
                }
                else if (grade.getText().toString().equals("B+"))
                {
                    points.setText("3.25");
                }
                else if (grade.getText().toString().equals("B"))
                {
                    points.setText("3.00");
                }
                else if (grade.getText().toString().equals("B-"))
                {
                    points.setText("2.75");
                }
                else if (grade.getText().toString().equals("C+"))
                {
                    points.setText("2.50");
                }
                else if (grade.getText().toString().equals("C"))
                {
                    points.setText("2.25");
                }
                else if (grade.getText().toString().equals("D"))
                {
                    points.setText("2.00");
                }
                else if (grade.getText().toString().equals("F"))
                {
                    points.setText("0.0");
                }
                else
                    points.setText(null);

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

points.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) {

                if (points.getText().toString().matches("[4]|[4]\\.[0]{0,2}"))
                {
                    grade.setText("A+");
                }
                else if (points.getText().toString().matches("[3]\\.[7][5]{1}"))
                {
                    grade.setText("A");
                }
                else if (points.getText().toString().matches("[3]\\.[5][0]{0,1}"))
                {
                    grade.setText("A-");
                }
                else if (points.getText().toString().matches("[3]\\.[2][5]{1}"))
                {
                    grade.setText("B+");
                }
                else if (points.getText().toString().matches("[3]|[3]\\.[0]{0,2}"))
                {
                    grade.setText("B");
                }
                else if (points.getText().toString().matches("[2]\\.[7][5]{1}"))
                {
                    grade.setText("B-");
                }
                else if (points.getText().toString().matches("[2]\\.[5][0]{0,1}"))
                {
                    grade.setText("C+");
                }
                else if (points.getText().toString().matches("[2]\\.[2][5]{1}"))
                {
                    grade.setText("C");
                }
                else if (points.getText().toString().matches("[2]|[2]\\.[0]{0,2}"))
                {
                    grade.setText("D");
                }
                else if (points.getText().toString().matches("[0]|[0]\\.[0]{0,2}"))
                {
                    grade.setText("F");
                }
                else
                    grade.setText(null);

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

在片段的onViewCreated()方法或活动中的onCreate()中调用setFocus

的setFocus(级);

的setFocus(分);

TextWatcher gradeWatcher = 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 (grade.getText().toString().equals("A+"))
                {
                    points.setText("4.00");
                }
                else if (grade.getText().toString().equals("A"))
                {
                    points.setText("3.75");
                }
                else if (grade.getText().toString().equals("A-"))
                {
                    points.setText("3.50");
                }
                else if (grade.getText().toString().equals("B+"))
                {
                    points.setText("3.25");
                }
                else if (grade.getText().toString().equals("B"))
                {
                    points.setText("3.00");
                }
                else if (grade.getText().toString().equals("B-"))
                {
                    points.setText("2.75");
                }
                else if (grade.getText().toString().equals("C+"))
                {
                    points.setText("2.50");
                }
                else if (grade.getText().toString().equals("C"))
                {
                    points.setText("2.25");
                }
                else if (grade.getText().toString().equals("D"))
                {
                    points.setText("2.00");
                }
                else if (grade.getText().toString().equals("F"))
                {
                    points.setText("0.0");
                }
                else
                    points.setText(null);

            }
        };

TextWatcher pointWatcher = 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 (points.getText().toString().matches("[4]|[4]\\.[0]{0,2}"))
                {
                    grade.setText("A+");
                }
                else if (points.getText().toString().matches("[3]\\.[7][5]{1}"))
                {
                    grade.setText("A");
                }
                else if (points.getText().toString().matches("[3]\\.[5][0]{0,1}"))
                {
                    grade.setText("A-");
                }
                else if (points.getText().toString().matches("[3]\\.[2][5]{1}"))
                {
                    grade.setText("B+");
                }
                else if (points.getText().toString().matches("[3]|[3]\\.[0]{0,2}"))
                {
                    grade.setText("B");
                }
                else if (points.getText().toString().matches("[2]\\.[7][5]{1}"))
                {
                    grade.setText("B-");
                }
                else if (points.getText().toString().matches("[2]\\.[5][0]{0,1}"))
                {
                    grade.setText("C+");
                }
                else if (points.getText().toString().matches("[2]\\.[2][5]{1}"))
                {
                    grade.setText("C");
                }
                else if (points.getText().toString().matches("[2]|[2]\\.[0]{0,2}"))
                {
                    grade.setText("D");
                }
                else if (points.getText().toString().matches("[0]|[0]\\.[0]{0,2}"))
                {
                    grade.setText("F");
                }
                else
                    grade.setText(null);

            }
        };
 /*---------- SET FOCUS LISTENERS ON EDIT TEXT--------------------------*/
    public void setFocus(EditText editText){
        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    if (v.getId() == grade.getId()) {     
                        grade.addTextChangedListener(gradeWatcher);
                        points.removeTextChangedListener(pointWatcher);
                    } else if (v.getId() == points.getId()) {
                        points.addTextChangedListener(pointWatcher);    
                        grade.removeTextChangedListener(gradeWatcher);

                    }  
                }
            }
        });
    }