Android EditText textwatcher вызывается при повороте экрана - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть активность с простой страницей входа в систему.При нажатии кнопки «Отправить» я устанавливаю красную рамку для текста редактирования электронной почты и добавляю текстовый наблюдатель, чтобы в текстовом редакторе я мог изменить границу текста для редактирования электронной почты с красного на серый.Все работает нормально, пока я не изменю ориентацию экрана.когда я нахожусь в режиме potrait, я устанавливаю красную рамку для текста редактирования электронной почты, он меняется, когда я поворачиваю экран, кажется, вызывается textwacther.Как сохранить состояние editext так, чтобы, если я установил его цвет границы красным, он должен быть установлен как красный, независимо от поворота экрана, а также после обмена, он должен измениться на серый.

ниже - мой класс Actvity:

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.email)
    EditText email;
    @BindView(R.id.password)
    EditText password;
    @BindView(R.id.submit)
    Button submit;
    private MyViewModel myViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
        setUpTextWatcher(email,password);

        myViewModel.setError().observe(this,getErrorObserver());
        myViewModel.resetError().observe(this,getResetObserver());
    }

    private Observer<EditText> getResetObserver() {
        return  new Observer<EditText>() {
            @Override
            public void onChanged(@Nullable EditText editText) {
                if(editText.getId() == email.getId()){
                    email.setBackgroundDrawable(getResources().getDrawable(R.drawable.input_shape));
                }else{
                    password.setBackgroundDrawable(getResources().getDrawable(R.drawable.input_shape));
                }
            }
        };
    }

    private Observer<EditText> getErrorObserver() {
        return  new Observer<EditText>() {
            @Override
            public void onChanged(@Nullable EditText editText) {
                if(editText.getId() == email.getId()){
                    email.setBackgroundDrawable(getResources().getDrawable(R.drawable.red_input_shape));
                }else{
                    password.setBackgroundDrawable(getResources().getDrawable(R.drawable.red_input_shape));
                }

            }
        };
    }


    @OnClick(R.id.submit)
    public void autenticate(){
        myViewModel.setError().setValue(email);
    }

    private void setUpTextWatcher(EditText ...editTexts) {
        for(final EditText editText: editTexts){
            editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                        if(editText.hasFocus()){
                            myViewModel.resetError().setValue(email);

                        }
                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });
        }
    }

}

ниже - класс модели Myview

import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;
import android.widget.EditText;

public class MyViewModel  extends ViewModel {
    private MutableLiveData<EditText> setErrorOnEditText;
    private MutableLiveData<EditText> resetErrorOnEditText;

    public MutableLiveData<EditText> setError() {
        if (setErrorOnEditText == null) {
            setErrorOnEditText = new MutableLiveData<EditText>();
        }
        return setErrorOnEditText;
    }

    public MutableLiveData<EditText> resetError() {
        if (resetErrorOnEditText == null) {
            resetErrorOnEditText = new MutableLiveData<EditText>();
        }
        return resetErrorOnEditText;
    }
}

ниже - мой xml-файл для настройки серого фона редактирования текста:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="2dip"
    android:layout_height="2dip"
    android:shape="rectangle" >
    <corners
        android:radius="2dp"
        />
    <gradient
        android:angle="45"
        android:centerX="35%"
        android:centerColor="#fff"
        android:startColor="#fff"
        android:endColor="#fff"
        android:type="linear"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <size
        android:width="250dp"
        android:height="50dp"
        />
    <stroke
        android:width="1dp"
        android:color="@color/input_border"
        />
</shape>

ниже - мой xml-файл для редактирования настроекфон текста красный:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="2dip"
    android:layout_height="2dip"
    android:shape="rectangle" >
    <corners
        android:radius="2dp"
        />
    <gradient
        android:angle="45"
        android:centerX="35%"
        android:centerColor="#fff"
        android:startColor="#fff"
        android:endColor="#fff"
        android:type="linear"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <size
        android:width="250dp"
        android:height="50dp"
        />
    <stroke
        android:width="1dp"
        android:color="@color/theme_color"
        />
</shape>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...