Как установить один TextWatcher для динамического больше, чем Edittext в Android

Я хочу установить один textwatcher для динамического больше, чем Edittext. Если я создаю Dynamic Edittext, я хочу использовать один textWatcher для всех Dynamic Edittext.Если кто-нибудь знает, скажите мне

3 ответа

Вы можете создать собственный класс Text Watcher для редактирования текста.

      class DynamicTextWatcher(private val editText: EditText, private val type: String) :
TextWatcher {

var beforeText : String = ""

override fun beforeTextChanged(p0: CharSequence?, start: Int, before: Int, count: Int) {
    beforeText = p0.toString()
}

override fun onTextChanged(p0: CharSequence?, start: Int, before: Int, count: Int) {

    if (p0 == null)
        return
    // 1. get cursor position : p0 = start + before
    val initialCursorPosition = start + before
    //2. get digit count after cursor position : c0
    val numOfDigitsToRightOfCursor = getNumberOfDigits(beforeText.substring(initialCursorPosition,
        beforeText.length))
    try {

        editText.removeTextChangedListener(this)

        val value = editText.text.toString().trimStart(' ')
        if (value != "") {
            when(type){
                Constants.FORM_INPUT_NAME -> {
                    //editText.setText(value.replaceFirstChar { it.uppercase() })
                    val fc = value[0]
                    if (fc == ' '){
                        editText.setText(value.drop(1))
                    }else{
                        if (value.contains("  ")){
                            editText.setText(value.replace("  ", " "))
                        }
                        else {
                            editText.setText(value)
                        }
                    }
                }
                Constants.FORM_INPUT_NO_SPACE -> editText.setText(value.removeWhitespaces())
                Constants.FORM_INPUT_MOBILE -> {
                    val cs = value.removeWhitespaces()
                    val cleanString = cs.replace("[^0-9]".toRegex(), "")
                    editText.setText(cleanString)
                }
                //Constants.FORM_INPUT_PASSWORD -> editText.setText(value.removeWhitespaces())
            }
        }else{
            editText.setText(value)
        }
        editText.setSelection(getNewCursorPosition(numOfDigitsToRightOfCursor, value,type))
        editText.addTextChangedListener(this)
    } catch (ex: Exception) {
        ex.printStackTrace()
        editText.addTextChangedListener(this)
    }
}

override fun afterTextChanged(s: Editable) {

}

private fun getNewCursorPosition(digitCountToRightOfCursor : Int, numberString : String, type : String) : Int{
    Log.v("getNewCursorPosition","hello"+numberString+"hello")
    var position = 0
    var c = digitCountToRightOfCursor
    var value =  numberString
    when(type){
        Constants.FORM_INPUT_NAME -> {
            if (numberString.contains("  ")){
                value =  numberString.replace("  ", " ")
            }
        }
        Constants.FORM_INPUT_NO_SPACE -> value = numberString.removeWhitespaces()
        Constants.FORM_INPUT_MOBILE -> { }
    }
    for (i in value.reversed()) {
        if (c == 0)
            break
        else
            c --
        position ++
    }
    return value.length - position
}

private fun getNumberOfDigits(@NonNull text : String) : Int{
    var count = 0
    for (i in text)
            count++
    return count
}

}

Этот код в вашей деятельности

      registerSheetBinding.etPassword.addTextChangedListener(
        DynamicTextWatcher(
            registerSheetBinding.etPassword,
            Constants.FORM_INPUT_NO_SPACE
        )
    )
    registerSheetBinding.etEmail.addTextChangedListener(
        DynamicTextWatcher(
            registerSheetBinding.etEmail,
            Constants.FORM_INPUT_NO_SPACE
        )
    )
    registerSheetBinding.etFullName.addTextChangedListener(
        DynamicTextWatcher(
            registerSheetBinding.etFullName,
            Constants.FORM_INPUT_NAME
        )
    )

Я надеюсь, что этот код будет полезен для вас.#Android-разработчик

Вы можете создать собственный класс TextWatcher, как показано ниже.

private class CustomTextWatcher implements TextWatcher{

        private EditText et;

        private CustomTextWatcher (EditText et){

            this.et = et;

        }

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {


        }

    }

Для настройки textwatcher вы можете сделать, как показано ниже

yourdynamicedittext.addTextChangedListener(new CustomTextWatcher(yourdynamicedittext));

Внутри класса CustomTextWatcher вы можете обрабатывать относительный регистр для каждого текста редактирования, который вы назначаете TextChangedListener. Для определения различных текстовых правок вы можете установить тег и получить его внутри класса CustomTextWatcher.

yourdynamicedittext.setTag (1, 2,... n);

Это не мой ответ. Это мои коды Что я сделал

Activity.java

btnClick.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                for(int i=0;i<=3;i++)
            {
                final EditText editText=new EditText(TextWatchSamp.this);
                linear.addView(editText);
                editText.addTextChangedListener(new CustomTextWatcher(editText));


                }


                }


        });

CustomTextWatcher.java

public class CustomTextWatcher implements TextWatcher {
    EditText et=null;
     CustomTextWatcher (EditText et){
         this.et=et;

     }

    @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

    }

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

}

Но ошибка приходит на et.setText(s); Зачем?

Другие вопросы по тегам