Как использовать onSavedInstanceState с виджетами?

Я изучаю поворот экрана для приложения, я наткнулся на этот пример и попробовал его.

Моя проблема в том, что когда я пытаюсь сделать это с помощью виджета Button, его текст остается пустым. При нажатии кнопки появляется диалоговое окно выбора даты, чтобы выбрать дату. Но если экран поворачивается после выбора, ранее выбранная дата теряется.

Это мой код:

startDate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        setDate(startDate);
    }
});

public void setDate(final Button B)
{
    final Calendar calender = Calendar.getInstance();
    day = calender.get(Calendar.DAY_OF_MONTH);
    month = calender.get(Calendar.MONTH);
    year = calender.get(Calendar.YEAR);

    DatePickerDialog pickDate = new DatePickerDialog(add_event.this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
            calender.set(i,i1,i2);
            SimpleDateFormat dateFormat1 = new SimpleDateFormat("dd-MM-yyyy");
            String dateString = dateFormat1.format(calender.getTime());
            B.setText(dateString);
        }
    },year,month,day);
    pickDate.show();
}

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    outState.putString("startDate", startDate.getText().toString());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    startDate.setText(savedInstanceState.getString("startDate"));
}

Вот несколько изображений:

1 ответ

Решение

Попробуйте использовать версию onSaveInstanceState(Bundle outState) только с одним аргументом. Другой - для случаев, когда в манифесте установлен атрибут, чтобы действие сохранялось при перезагрузке.

Другие вопросы по тегам