我有一个 DetailsActivity,其中列出了多个图像的缩略图。我想通过将 URL 作为字符串传递到“FullScreenActivity”来打开一个新 Activity ,以允许用户查看较大版本的图像。
DetailsActivity 包含一个复杂的数据对象,我不想在用户打开全屏 View 时丢失该数据对象。
我可以将字符串传递给新的“FullScreenActivity”,下载图像,并且我可以捏/缩放图像等..但是当我单击UP时按钮返回到 DetailsAcitivity,应用程序崩溃,因为复杂的数据对象消失了。
当用户查看更大的图像时,如何保留 DetailsActivity?
这是我如何调用 FullScreenActivity。这在创建新 ImageView 并将其添加到 Activity 的 for 循环中调用。
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DetailsActivity.this, ViewFullPhotoActivity.class);
intent.putExtra("FullScreenPicture", (String) finalImageMap.get("MainImage"));
startActivity(intent);
}
});
在我的FullScreenActivity中,我通过以下方式获取URL字符串
String fullScreenImage = (String) getIntent().getCharSequenceExtra("FullScreenPicture");
我考虑过打包复杂数据对象并将其与新 Intent 一起发送的想法,但这肯定不是最佳实践。如果我走这条路,还有其他一些事情对用户来说不太好,特别是重新下载所有缩略图,或者丢失输入表单的数据。
最佳答案
我建议重写onSaveInstanceState()
,在那里保存数据,并在onCreate()
内从savedInstanceState
获取保存的数据。请参阅documentation了解更多。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save your data here with savedInstanceState.put<something>...
}
如果您的数据很复杂(不是字符串或整数或某些简单类型),您可以编写一个方法将其保存到Bundle
(可以将其放入savedInstanceState
bundle),另一个解析包并从中恢复数据)。但像这样存储图像并不是一个好主意...您可以将它们缓存在 SD 卡上(例如,在应用程序的数据目录中,但不在内存中)。
另一个选项,用于在全屏对话框而不是 Activity 中显示“FullScreenActivity”的内容,因此 DetailsActivity 不会在后台被破坏。
关于java - 打开新 Activity 而不丢失父 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36264090/