Когда я пытаюсь присвоить одно событие onTextChanged к одному EditText, чтобы значение из этого EditText записалось в другой EditText, всё работает хорошо. Но когда я делаю три onTextChanged на каждый из трёх EditText отдельно каждому, приложение вылетает. Что делать? Заранее спасибо
package com.romatopotatos.physicalformulas;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.text.TextWatcher;
import android.text.Editable;
public class FDvigActivity extends Activity {
EditText editS;
EditText editV;
EditText editT;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_f_dvig);
editS = (EditText) findViewById(R.id.sEdit);
editV = (EditText) findViewById(R.id.vEdit);
editT = (EditText) findViewById(R.id.tEdit);
editS.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence ch, int i, int i1, int i2){
}
@Override
public void onTextChanged(CharSequence ch, int i, int i1, int i2){
String s = editS.getText().toString();
editT.setText(s);
editV.setText(s);
}
@Override
public void afterTextChanged(Editable ed){
}
});
editV.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence ch, int i, int i1, int i2){
}
@Override
public void onTextChanged(CharSequence ch, int i, int i1, int i2){
String v = editV.getText().toString();
editT.setText(v);
editS.setText(v);
}
@Override
public void afterTextChanged(Editable ed){
}
});
editS.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence ch, int i, int i1, int i2){
}
@Override
public void onTextChanged(CharSequence ch, int i, int i1, int i2){
String t = editT.getText().toString();
editS.setText(t);
editV.setText(t);
}
@Override
public void afterTextChanged(Editable ed){
}
});
}
}
В приложении при вводе значения в одно поле должны меняться значения в других полях. Но пока я сделал так, чтобы при вводе значения в одно поле, это же значение появлялось в других полях. Но при попытке ввести текст приложение не отвечает, экранная клавиатура на некоторое время "застревает"
Да похоже на зацикливание: editV.setText(t) вызывает у editV метод onTextChanged, который вызывает onTextChanged у двух остальных, и по экспоненте. Помимо этого у вас в коде ошибка - editS.addTextChangedListener вы добавляете два раза, второй раз вы должны на editT добавить слушатель.
Нужно добавить три boolean переменные stopV, stopS, stopT для блокировки зацикливания. Код проверил, работает!
public class MainActivity extends AppCompatActivity {
EditText editS;
EditText editV;
EditText editT;
boolean stopV;
boolean stopS;
boolean stopT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editS = (EditText) findViewById(R.id.editS);
editV = (EditText) findViewById(R.id.editT);
editT = (EditText) findViewById(R.id.editV);
stopS=true;
stopV=true;
stopT=true;
editS.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence ch, int i, int i1, int i2){
}
@Override
public void onTextChanged(CharSequence ch, int i, int i1, int i2) {
if (stopS) {
String sw = editS.getText().toString();
stopT = false;
stopV=false;
editT.setText(sw);
editV.setText(sw);
}
stopS=true;
}
@Override
public void afterTextChanged(Editable s) {
}
});
editV.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence ch, int i, int i1, int i2){
}
@Override
public void onTextChanged(CharSequence ch, int i, int i1, int i2) {
if (stopV) {
stopS = false;
stopT = false;
String v = editV.getText().toString();
editT.setText(v);
editS.setText(v);
}
stopV=true;
}
@Override
public void afterTextChanged(Editable ed){
}
});
editT.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence ch, int i, int i1, int i2){
}
@Override
public void onTextChanged(CharSequence ch, int i, int i1, int i2){
if (stopT) {
stopV=false;
stopS=false;
String t = editT.getText().toString();
editS.setText(t);
editV.setText(t);
}
stopT=true;
}
@Override
public void afterTextChanged(Editable ed){
}
});
}
Xml:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="mihail_lagarnikov.ru.shadowtest1.MainActivity">
<EditText
android:id="@+id/editV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editV" />
<EditText
android:id="@+id/editT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editS" />
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
нужно отступить от нижнего правого угла, но если в view посадить bottom и right любое значение, то ничего не происходит, а отступ идет, только если...
Ситуация следующая: Юзер логинится в личный кабинет, переходя по рестам в логах могу отловить его логинВ одном из классов, метод SecurityUtils
Дооброго времени суток)У меня есть бд (MySQL) на хостинге