Прослушиватель EditText не работает

Вопрос:

Я создаю прослушиватель EditText, раздувая представление EditText из другого макета. Слушатель не работает. Я пытаюсь разместить инструкции печати ниже, но ни один из них не digitText.addTextChangedListener(...) после digitText.addTextChangedListener(...). Все, что до этого называется. Я убедился, что идентификатор верен, и он не получал нулевые указатели, раздувая взгляды. Любые предложения о том, почему он не работает?

public void digitsListener () {

LayoutInflater inflater = this.getLayoutInflater();
View dialpadLayout = inflater.inflate(R.layout.dialpad, null);
EditText digitText = (EditText)dialpadLayout.findViewById(R.id.digits);
digitText.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("If this prints it works.");
}

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

@Override
public void afterTextChanged(Editable s) {
}
});
}

Здесь вид EditText внутри dialpad.xml

<EditText
android:id="@+id/digits"
android:layout_width="0dip"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:focusable="true"
android:gravity="center"
android:layout_weight="0.6"
android:inputType="number"
android:scrollHorizontally="true"
android:textSize="40sp"/>

Лучший ответ:

Ваш EditText должен быть видимым на экране, чтобы вы могли взаимодействовать, поэтому, возможно, вам не нужен inflater. inflater возвращает новый объект каждый раз, когда он раздувает представление. Таким образом, EditText вы взаимодействуете, отличается от того, который вернулся надув. Если вы находитесь внутри Activity, вы можете изменить свой код таким образом.

public void digitsListener () {


            EditText digitText = (EditText) findViewById(R.id.digits);
            digitText.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    System.out.println("If this prints it works.");
                }

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

                @Override
                public void afterTextChanged(Editable s) {
                }
            });
}

Ответ №1

Вы тестируете Android? Тогда нет System.out.print()

Вместо этого вам необходимо использовать LogCat:

Log.i("tag", "If this prints it works");
Просто выберите любой тег, который вы хотите, это действительно не имеет значения, вам просто нужно его найти, используя тег: (например, тег: ошибка) в поле поиска над logcat

«Log.i» предназначен для информации «Log.w» для предупреждений «Log.e» для сообщений об ошибках

Если вы хотите, чтобы сообщение отображалось на вашем телефоне, вместо этого вы можете использовать Toasts:

Toast toast = Toast.makeText(getApplicationContext(), "If this prints it works", Toast.LENGTH_SHORT);
toast.show();

(См. Здесь)

Оцените статью
TechArks.Ru
Добавить комментарий