微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 EditText.setText() 时如何禁用 textwWatcher?

如何解决使用 EditText.setText() 时如何禁用 textwWatcher?

我正在一个 android studio 项目中工作,我正在尝试制作一个数字系统转换器应用程序。我使用了 2 个 EditTexts(二进制和十进制)。 APP SCREENSHOT

这里我希望每当用户输入十进制 EditText 时,其对应的值应设置为二进制 EditText,反之亦然。我在每个 EdtTexts 中使用 TextWatcher 来计算用户何时更改输入字段中的值。但是我遇到了一个问题,即每当向任何 EditTexts 输入内容时应用程序崩溃。

TextWatcher 用于十进制 EditText:-

TextWatcher textDec=new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s,int start,int count,int after) {

        }

        @Override
        public void onTextChanged(CharSequence s,int before,int count) {


        }

        @Override
        public void afterTextChanged(Editable s) {
            String binValue;
            String decString;
            decString = dec.getText().toString();
            if (decString.trim().equals("")) {
                binValue = "";
            }
            else {
                binValue = decToBinMain(decString);
            }
            if (bin.getText().toString()!=binValue) {
                textView4.setText(binValue);
                bin.setText(binValue);
            }
        }
    };

    dec.addTextChangedListener(textDec);

用于二进制 EditText 的 Textwatcher:-

TextWatcher textBin=new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s,int after) {

    }

    @Override
    
    public void onTextChanged(CharSequence s,int count) {
        String binValue;
        String decString;
        binValue=bin.getText().toString();
        if(binValue.trim().equals("")){
            decString="";
        }
        else {
            decString = String.valueOf(binToDec(binValue));
        }
        if(!dec.getText().toString().equals(decString)) {
            textView.setText(decString);
            dec.setText(decString);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};


bin.addTextChangedListener(textBin);

我不知道是什么问题以及为什么应用程序在输入到任何字段时崩溃。但是,当我将相应的值设置为 textView 时,它确实可以正常工作。任何帮助将不胜感激!谢谢!!

解决方法

您有一个循环电话:

dec -> bin -> dec -> bin -> dec -> bin

  1. 我建议您在方法中提取一些代码,以提高代码的可读性。

  2. 做完之后,你可能会有比我更好的主意。我的是一个标志:

     // in the Activity
    

    boolean update = true;

    // 把它放在每个 TextWatcher 中

             if(update) {
                 // execute your code here
             };
    
             update = !update;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?