Как EditText восстанавливает текст при изменении состояния с использованием Runnable и без него? - PullRequest
0 голосов
/ 05 июля 2019

СЛУЧАЙ 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());
    }
}
...