带有OnTextChangedListener的Android多个EditText

时间:2012-03-20 15:43:34

标签: android android-edittext

这真的很奇怪,昨天我问了问题Yesterdays question如何实现多个editText监听器以避免重复我的代码。我得到了一个答案(我发誓我试过了),但今天我没有得到它。我正在尝试执行以下操作,但在尝试设置tw Textwatcher时出现Cannot instantiate the type 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 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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

            }
        };

答案 2 :(得分:0)

还要确保ID正确无误 R.id.et用于所有三个EditText s

答案 3 :(得分:0)

游戏的后期,但如果你不提前知道你需要多少听众,我就会采用程序化方式。只需让函数在每次创建新视图时返回一个新的侦听器,然后将其附加到该视图。

List