2016-09-28 6 views
2

У меня есть два TextInputEditText поля:Android два TextInputEditText и два способа addTextChangedListener

TextInputEditText fromData = (TextInputEditText) view.findViewById(R.id.fromData); 
TextInputEditText toData = (TextInputEditText) view.findViewById(R.id.toData); 

Оба поля имеют addTextChangedListener() и должны изменить текст друг друг. Но это вызывает ошибку (рекурсия). Потому что, когда я пишу какой-то текст из fromData, текст toData также изменяется, и если toData текст изменяется изData также должен быть изменен.

Как я могу заставить textchangelistener работать в двух направлениях?

ответ

0

Переопределите слушателя, и если текст, в котором он был изменен, совпадает с тем, который уже есть, не меняет его.

Таким образом, текст изменен в fromData, и он вызывает текст с измененным прослушивателем в текстовом измененном контроле, если текст, который был изменен, равен тексту, который уже существует в текстовом виде, если он ничего не делает.

onTextChanged(String newText) { 
    if (!newText.equals(fromData.getText())) { 
      fromData.setText(newText); 
    } 
} 
0

Вы можете определить глобальную переменную, как focusedTextView, а затем добавить на сенсорных слушателей к обоим TextViews. Теперь, когда затрагивается конкретный вид.

Вы просто установите значение этой переменной для этого вида.

Наконец, в вашем addTextChangeListener просто проверить что является текущего значения этого глобального переменной и просто изменить текст другого TextView, который не сфокусирован.

Надеюсь, это даст вам двухсторонний результат, который вы хотите.

Сообщите мне, если это ничего не изменит для вас.