Как установить один 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); Зачем?