我们可以使用Intent附加功能来保存UI吗?

问题描述 投票:-2回答:1

我正在阅读有关用于跨配置更改和系统启动的进程死亡保留UI数据的不同方法。我碰到了这段我不敢说的话。

谁有人解释一下?

此外,当您从intent打开活动时,会在配置更改和系统恢复活动时将附加捆绑包传递给活动。如果在启动活动时将一个UI状态数据(例如搜索查询)作为intent extra传递,则可以使用extras bundle而不是onSaveInstanceState()包。

链接:https://developer.android.com/topic/libraries/architecture/saving-states

android user-interface configuration
1个回答
0
投票

他们所说的是,当“配置更改”或“系统启动的进程死亡”之后恢复活动时,您可以使用多个源来检索数据,以便像以前那样进行设置:

  1. 无论在活动被杀之前存储在savedInstanceState包中的是什么。
  2. 无论存储在用于启动活动的Intent中的是什么。在活动被杀死和恢复后,仍然可以使用相同的Intent

例如,假设您有一个UserProfile活动,显示有关当前用户的信息。当您从其他活动中启动UserProfileActivity时,您可以在Intent中包含有关用户的信息:

// Create Intent to start the `UserProfileActivity`
final Intent intent = new Intent(this, UserProfileActivity.class);
intent.putExtra("first_name", "John");
intent.putExtra("last_name", "Doe");

// Launch the intent
startActivity(intent);

然后在UserProfileActivity中,您可以检索该信息:

// Get the intent that was used to launch this activity
final Intent = getIntent();

// Get the required info from the intent
final String firstName = intent.getStringExtra("first_name");
final String lastName = intent.getStringExtra("last_name");

// Update the UI
TextView tvName = findViewById(R.id.userName);
tvName.setText(firstName + " " + lastName);

现在说UserProfileActivity有一个“关于你”的EditText字段和一个“保存”按钮,它将在其配置文件中存储EditText的内容。 当用户决定旋转屏幕时,用户可以在“关于你”Edi​​tText中编写内容。活动被杀死了,但他们还没有点击“保存”按钮!他们写的所有东西都丢失了=不开心的用户!

我们如何创造更好的用户体验?当UserProfileActivity即将被杀死时,onSaveInstanceState()将被调用,因此保存savedInstanceState包中“About You”EditText的当前内容,并在重新创建活动后恢复它。

@Override
protected void onSaveInstanceState(Bundle outState) {

    // Store relevant state variables
    final EditText etAboutYou = findViewById(R.id.aboutYou);
    outState.putString("about_you", etAboutYou.getText().toString());

    super.onSaveInstanceState(outState);
}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_profile);

    // Restore saved state if required
    if (savedInstanceState != null) {
        final String aboutYou = savedInstanceState.getString("about_you");
        final EditText etAboutYou = findViewById(R.id.aboutYou);
        etAboutYou.setText(aboutYou);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.