如何解决android中的EditText递归问题

时间:2017-05-03 12:28:02

标签: android

当我在第一个EditText值中输入输入时,我有两个EditText也将在第二个EditText中显示,反之亦然。当我输入第一个edittext值时,在第二个edittext中显示但是当我尝试输入第二个编辑文本时,值不是显示和应用程序没有响应。我尝试多次添加TextWatcher并从另一个编辑文本中删除但无法解决问题。非常感谢您的帮助。

    etuptext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            et_bottom.setText(charSequence.toString());
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

    et_bottom.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {


          //  etuptext.setText(charSequence.toString());

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

3 个答案:

答案 0 :(得分:1)

使用查看hasFocus()方法查看其他EditText具有焦点的天气。如果没有,则设置文本否则什么也不做。

以下是工作代码:

etuptext.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        if (!et_bottom.hasFocus())
            et_bottom.setText(charSequence.toString());
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

et_bottom.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        if (!etuptext.hasFocus())
            etuptext.setText(charSequence.toString());
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

答案 1 :(得分:0)

嗨,您需要检查是否反映了EditText不应该是焦点。

$entries = "";
$filename = "test.txt";
foreach($_POST as $value) {
    if( is_array( $value ) ) {
        foreach( $value as $subvalue ) {
            if (strlen($subvalue) > 5) {
                $entries .= $subvalue . PHP_EOL;
            }
        }
    }
}
file_put_contents($filename, $entries);

所有这一切都发生了,因为当您尝试将文本设置为EditText时,它会获得焦点并在第一个和第二个中写入将请求焦点,因此应用程序将进入无响应模式。

答案 2 :(得分:0)

在设置文本之前删除TextWatchers。设置完文本后,再次添加TextWatcher。

在伪代码中:

TextWatcher edittext1watcher = null;
TextWatcher edittext2watcher = null;

edittext1watcher = new TextWatcher () {
...
    public void onTextChanged(.....) {
        edittext2.removeTextChangedListener(edittext2watcher);
        edittext2.setText(...);
        edittext2.addTextChangedListener(edittext2watcher);
    }
};
edittext2watcher = new TextWatcher () {
...
    public void onTextChanged(.....) {
        edittext1.removeTextChangedListener(edittext1watcher);
        edittext1.setText(...);
        edittext1.addTextChangedListener(edittext1watcher);
    }
};

edittext1.addOnTextChangedListener(edittext1watcher);
edittext2.addOnTextChangedListener(edittext2watcher);