“中的方向怪癖”;你好,DatePicker“;Android SDK教程

“中的方向怪癖”;你好,DatePicker“;Android SDK教程,android,orientation,Android,Orientation,如果您创建本教程中描述的应用程序 更改日期,然后旋转设备,您将注意到以下情况: 应用程序的textview日期会按预期重置(因为活动会被销毁并重新创建),但如果您点击“更改日期”按钮,则会保留您在旋转之前设置的日期。SDK文档不鼓励使用onConfigChanged=“orientation | screenSize”捕捉方向更改,因此我的问题是:让日期选择器的默认值与应用程序中使用的成员变量保持一致的“最佳”方法是什么?我不太关心成员变量的值是否被保留,或者选择器是否与它们一起重置为今天的日期

如果您创建本教程中描述的应用程序 更改日期,然后旋转设备,您将注意到以下情况:
应用程序的textview日期会按预期重置(因为活动会被销毁并重新创建),但如果您点击“更改日期”按钮,则会保留您在旋转之前设置的日期。SDK文档不鼓励使用onConfigChanged=“orientation | screenSize”捕捉方向更改,因此我的问题是:让日期选择器的默认值与应用程序中使用的成员变量保持一致的“最佳”方法是什么?我不太关心成员变量的值是否被保留,或者选择器是否与它们一起重置为今天的日期,但我觉得不一致性看起来很松散。

您可以将
日期选择器对话框
成员变量保存在
OnSaveState
中,然后在
onCreate
中恢复它们。比如:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putInt("day", mDay);
    outState.putInt("month", mMonth);
    outState.putInt("year", mYear);
}

要完成上述答案,您可能会执行如下操作,如下所示(在活动中覆盖以下两种方法):

@Override protected void onSaveInstanceState (Bundle outState)
{
    super.onSaveInstanceState (outState);
    outState.putInt ("YEAR", mDatePicker.getYear ());
    outState.putInt ("MONTH", mDatePicker.getMonth ());
    outState.putInt ("DAY", mDatePicker.getDayOfMonth ());
}

@Override protected void onRestoreInstanceState (Bundle savedInstanceState)
{
    super.onRestoreInstanceState (savedInstanceState);
    mDatePicker.updateDate (savedInstanceState.getInt ("YEAR"),
                            savedInstanceState.getInt ("MONTH"),
                            savedInstanceState.getInt ("DAY"));
}