安卓:两个EditText不能有两个addTextChangedListener吗?

6

我正在尝试创建两个EditText,当我在其中一个EditText中输入任何内容时,我输入的文本将显示在另一个EditText上。

private EditText input_a;
private EditText input_b;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    input_a = (EditText) findViewById(R.id.input_a);
    input_b = (EditText) findViewById(R.id.input_b);
    input_a.setOnFocusChangeListener(this);
    input_b.setOnFocusChangeListener(this);
}
@Override
public void onFocusChange(View v,boolean hasFocus) {
    // TODO Auto-generated method stub
    if(v==input_a && hasFocus){
        input_a.setText("");
        input_b.setText("");
        input_a.addTextChangedListener(new TextWatcher(){

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                input_b.setText(input_a.getText());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start,
                    int before, int count) {
                // TODO Auto-generated method stub

            }

        });

    }else if(v==input_b && hasFocus){
        input_b.setText("");
        input_a.setText("");
        input_b.addTextChangedListener(new TextWatcher(){

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                input_a.setText(input_b.getText());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start,
                    int before, int count) {
                // TODO Auto-generated method stub

            }

        });
    }

当我在input_a中输入时,它可以正常工作,我输入的文本会显示在input_b中,但是当我在input_b中输入时,应用程序会意外关闭。我不明白为什么这两个代码块非常相似,但只有一个能正常工作。

2个回答

0

在LogCat中的错误信息是什么?找到与您的代码相关的那一个。
Cliff


0

你可能会遇到堆栈溢出的问题(讽刺吧)?

问题在于,当 input_a 获得焦点时,你添加了一个 TextChangedListener,在该监听器中设置了 input_b 的内容。这很好地解决了问题。

然而,当焦点转移到 input_b 时,你为 input_b 添加了一个 TextChangedListener,但仍然保留了 input_a 的 TextChangedListener。现在,当你在 input_b 中输入时,它会更改 input_a 的内容,从而触发其 TextChangeListener,进而更改 input_b 的内容。这又会触发 input_b 的 TextChangedListener,如此循环。


我认为是这样,这可能解释了为什么我收到一系列看起来像无限循环的错误消息。非常感谢!我在添加新的TextChangedListener之前尝试了removeTextChangedListener,并且它有效了! - xiaoyao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接