СЛУЧАЙ 1:
Я прочитал и проверил, что если мы добавим android: saveEnabled = "false" к EditText в XML и обновим текст с чем-то поочередно, EditText обновляется, как и ожидалось. Но если мы удалим этот атрибут XML, EditText восстанавливает то, что было на нем перед вращением Почему это происходит?
Случай 2:
Имея опыт работы с CASE 1 по моему мнению, код в CASE 2 также должен вести себя так же:
Если я что-то напишу в EditText, это должно быть восстановлено при ротации вместо значения, извлеченного из базы данных , потому что атрибут android: saveEnabled = "false" отсутствует в XML .
Но это противоречит случаю 1.
Может кто-нибудь объяснить, почему в CASE 1 мне нужно установить атрибут XML на false, но не в CASE 2 и как это происходит?
Случай 1:
public class MainActivity extends AppCompatActivity {
private EditText editText;
private Boolean secondTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
secondTime = false;
if (savedInstanceState != null && savedInstanceState.containsKey("KEY")) {
secondTime = savedInstanceState.getBoolean("KEY", false);
}
editText = findViewById(R.id.editText);
if (secondTime == true) {
editText.setText("Second Time");
} else {
editText.setText("First Time");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("KEY", true);
}
}
Случай 2:
public class AddTaskActivity extends AppCompatActivity {
public static final String EXTRA_TASK_ID = "extraTaskId";
// Extra for the task ID to be received after rotation
public static final String INSTANCE_TASK_ID = "instanceTaskId";
private static final int DEFAULT_TASK_ID = -1;
EditText mEditText;
private int mTaskId = DEFAULT_TASK_ID;
private AppDatabase mDb;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_task);
mEditText = findViewById(R.id.editTextTaskDescription);
mDb = AppDatabase.getInstance(getApplicationContext());
if (savedInstanceState != null && savedInstanceState.containsKey(INSTANCE_TASK_ID)) {
mTaskId = savedInstanceState.getInt(INSTANCE_TASK_ID, DEFAULT_TASK_ID);
}
Intent intent = getIntent();
if (intent != null && intent.hasExtra(EXTRA_TASK_ID)) {
mTaskId = intent.getIntExtra(EXTRA_TASK_ID, DEFAULT_TASK_ID);
AppExecutors.getInstance().diskIO().execute(new Runnable() {
@Override
public void run() {
final TaskEntry task = mDb.taskDao().loadTaskById(mTaskId);
runOnUiThread(new Runnable() {
@Override
public void run() {
populateUI(task);
}
});
}
});
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(INSTANCE_TASK_ID, mTaskId);
super.onSaveInstanceState(outState);
}
private void populateUI(TaskEntry task) {
if (task == null)
return;
mEditText.setText(task.getDescription());
}
}