Android多个带有OnTextChangedListener的EditText

4
这真的很奇怪,昨天我问了这个问题:昨天的问题如何实现多个EditText监听器以避免重复代码。我得到了一个友好的答案(我发誓我试过了),但今天我却没有进展。我正在尝试做以下操作,但在设置tw Textwatcher时出现了无法实例化类型TextWatcher的错误。
**TextWatcher tw = new TextWatcher();**

intTextValue.addTextChangedListener(tw);

任何帮助都将不胜感激。这让我有点疯狂。
最终,我正在尝试达到以下情况(应该很简单,对吧?)。
public class myClass extends Activity implements OnFocusChangeListener, TextWatcher {
private EditText et;
private EditText et1;
private EditText et2;
private int whoHasFocus= 0;

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout1);


        et = (EditText)findViewById(R.id.et);
        et.setOnFocusChangeListener(this);
        et.addTextChangedListener(tw);

        et1 = (EditText)findViewById(R.id.et);
        et1.setOnFocusChangeListener(this);
        et1.addTextChangedListener(tw);

        et2 = (EditText)findViewById(R.id.et);
        et2.setOnFocusChangeListener(this);
        et2.addTextChangedListener(tw);

}

        @Override
        public void onFocusChange(View v, boolean hasFocus) {

            switch (v.getId()) {
            case R.id.et:
                whoHasFocus =1;
                break;
            case R.id.et1:
                whoHasFocus =2;
                break;
            case R.id.et2:
                whoHasFocus=3;
                break;              
            }


        }

    @Override
    public void afterTextChanged(Editable s) {
        switch (whoHasFocus) {
            case 1:
                //do code
                break;
            case 2:
                //do code
                break;
            case 3:
                //do code
                break;              
            }

    }

    @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

    }

}
4个回答

4

您不需要一个TextWatcher实例,只需使用“this”

et.addTextChangedListener(this);
et1.addTextChangedListener(this);
et2.addTextChangedListener(this);

这真是奇怪,为什么之前对我不起作用!哎呀,也许是看树木忘了森林。非常感谢您的迅速回复。 :) - Purplemonkey
1
请您能否再解释一下,我不太明白如何使用这个,我是 Android 新手。 - Developer

0

TextWatcher 是一个接口。你不能实例化接口。一个类需要实现这个接口,这个类可以被实例化。因此,你需要创建一个类,无论是匿名类还是普通类,并且实例化它。

例如:

TextWatcher tw = 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

            }
        };

0
虽然有点晚了,但如果您事先不知道需要多少个侦听器,以下是我如何以编程方式完成它的方法。只需编写一个函数,在每次创建新视图时返回一个新的侦听器,然后将其附加到该视图即可。
private TextWatcher getTextWatcher() {
    return 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) {

        }
    };
}

0

还要确保id正确,R.id.et用于所有的三个EditText


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