複数の EditText に単一の TextWatcher を使用するにはどうすればよいでしょうか? 質問する

複数の EditText に単一の TextWatcher を使用するにはどうすればよいでしょうか? 質問する

ビュー レイアウトに3 つのウィジェットがあります。 3 つすべてにEditText1 つのウィジェットを使用する方法はありますか?TextWatcherEditTexts

ベストアンサー1

私はこの問題に遭遇しました。Viewを引数として受け取るの内部クラス実装を作成することで解決しました。次に、メソッド実装でビューをオンにして、どのビューから来ているかTextWatcherを確認します。Editable

宣言:

private class GenericTextWatcher implements TextWatcher{

    private View view;
    private GenericTextWatcher(View view) {
        this.view = view;
    }

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

    public void afterTextChanged(Editable editable) {
        String text = editable.toString();
        switch(view.getId()){
            case R.id.name:
                model.setName(text);
                break;
            case R.id.email:
                model.setEmail(text);
                break;
            case R.id.phone:
                model.setPhone(text);
                break;
        }
    }
}

使用法:

name = (EditText) findViewById(R.id.name);
name.setText(model.getName());
name.addTextChangedListener(new GenericTextWatcher(name));

email = (EditText) findViewById(R.id.email);
email.setText(model.getEmail());
email.addTextChangedListener(new GenericTextWatcher(email));

phone = (EditText) findViewById(R.id.phone);
phone.setText(model.getPhone());
phone.addTextChangedListener(new GenericTextWatcher(phone));

おすすめ記事