Изменение текста в addTextChangedListener слушатель редактирования текста в Android дает ошибку - PullRequest
0 голосов
/ 08 января 2019
  • Разве невозможно изменить текст EditText в afterTextChanged
  • выдает ошибку ниже
  • Есть ли конкретный способ изменить текст

Код:

inputEmail.addTextChangedListener(object :TextWatcher{
            override fun afterTextChanged(s: Editable?) {
                inputEmail.setText("123456")
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

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

        })

Ошибка:

at com.caring2u.organizer.ui.fragments.screen.FrgBookingDetails$setEditTextListeners$4.afterTextChanged(FrgBookingDetails.kt:256)
        at android.widget.TextView.sendAfterTextChanged(TextView.java:9605)
        at android.widget.TextView.setText(TextView.java:5496)
        at android.widget.TextView.setText(TextView.java:5343)
        at android.widget.EditText.setText(EditText.java:113)
        at android.widget.TextView.setText(TextView.java:5300)

1 Ответ

0 голосов
/ 08 января 2019

Изменение EditText в TextWatcher не очень хорошая идея.

Когда вы устанавливаете text на editText, ваш TextWatcher будет звонить снова.

Примечание: - И оно войдет в бесконечный цикл .

Решение для этого: -

Используйте строковое значение в результате в TextWacher и измените ExitText вне text-watcher.

Используя TextView, вы можете сделать это .....

Создайте TextView в вашем макете, как показано ниже.

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <EditText
            android:id="@+id/edit_phone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/border_edittext"
            android:gravity="center"
            android:inputType="number"
            android:padding="10dp"
            android:singleLine="true" />



            <TextView
                android:id="@+id/text_phone"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/border_edittext"
                android:gravity="center"
                android:inputType="number"
                android:padding="10dp"
                android:singleLine="true" />



    </FrameLayout>

и используйте textWatcher и обновите ваш TextView текст внутри onTextChange() метод

Другое решение : - Создайте XMl следующим образом

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/code"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:background="@drawable/border_edittext"
        android:gravity="center"
        android:inputType="number"
        android:padding="10dp"
        android:text=""
        android:singleLine="true" />

    <EditText
        android:id="@+id/mobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/border_edittext"
        android:gravity="center"
        android:inputType="number"
        android:padding="10dp"
        android:singleLine="true" />


</LinearLayout>

и обновите ваш editText с помощью id кода в вашем textWatcher вашего editText с помощью id мобильного .

...