Android несколько EditText с OnTextChangedListener - PullRequest
4 голосов
/ 20 марта 2012

это действительно странно, вчера я задал вопрос вчерашний вопрос как реализовать несколько слушателей editText, чтобы избежать дублирования моего кода. Мне любезно предоставили ответ (который я клянусь, я попробовал), но сегодня я не получаю с этим. Я пытаюсь сделать следующее, но получаю ошибку Cannot instantiate the type TextWatcher при попытке настроить tw 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 голосов
/ 20 марта 2012

Вам не нужен экземпляр TextWatcher, просто используйте «this»

et.addTextChangedListener(this);
et1.addTextChangedListener(this);
et2.addTextChangedListener(this);
0 голосов
/ 19 февраля 2016

Поздно к игре, но вот как я делаю это программным способом, если вы не знаете заранее, сколько слушателей вам понадобится. Просто попросите функцию возвращать нового слушателя каждый раз, когда вы создаете новое представление, а затем присоединяете его к этому представлению.

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 голосов
/ 20 марта 2012

Также убедитесь, что идентификаторы верны. R.id.et используется для всех трех EditText s

0 голосов
/ 20 марта 2012

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

            }
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...