android:configChanges="orientation|screenSize" 改变我的布局外观

Mar*_*023 0 android landscape-portrait

我有一个Adapter班级和一个MainActivity. 班级Adapter显示孩子们的姓名列表,在姓名旁边,还显示time他们到达学校的时间。问题是当我旋转到横向时,这些time值会丢失。

我考虑在我的清单中添加MainActivity

android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)

发生的情况是,时间值在横向模式下不会丢失,但布局的外观与纵向模式相同。实际上,横向布局看起来与纵向布局有点不同。

在这种情况下我该怎么做才能获得time值并保持景观布局的外观。

com*_*ade 5

有 2 个选项:

  1. 在 Activity 或 Fragment 中使用onSaveInstanceState(Bundle outState)方法 - 保存数据并在旋转后恢复它们(在onCreate(Bundle savedInstanceState)或 中onRestoreInstanceState(Bundle savedInstanceState)

例子:

 @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putSerializable("time_data", (Seriazable) mTimeList);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        if (savedInstanceState != null) {
            // restore value of members from saved state
            mTimeList = savedInstanceState.getSerializable("time_data");
        }

        ...
    }
Run Code Online (Sandbox Code Playgroud)
  1. 使用 android:configChanges 就像您已经用来自己处理更改一样,但在旋转后会膨胀横向布局

例子:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢第一个选项,也是Android 指南中建议的。