У меня есть активность с простой страницей входа в систему.При нажатии кнопки «Отправить» я устанавливаю красную рамку для текста редактирования электронной почты и добавляю текстовый наблюдатель, чтобы в текстовом редакторе я мог изменить границу текста для редактирования электронной почты с красного на серый.Все работает нормально, пока я не изменю ориентацию экрана.когда я нахожусь в режиме 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>