我有一个详细的活动,列出了几个图像的缩略图。我想打开一个新的活动,将url作为字符串传递给一个“fullscreenactivity”,允许用户查看图像的更大版本。
detailsactivity包含一个复杂的数据对象,当用户打开全屏视图时,我不想丢失它。
我可以将字符串传递给新的“fullscreenactivity”,图像下载,还可以对图像进行收缩/缩放等操作。但当我单击向上按钮返回detailsacitivity时,应用程序会崩溃,因为复杂的数据对象已经消失。
当用户看到更大的图像时,如何保持细节的活跃性?
下面是我如何调用fullscreenactivity。这在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);
}
});

在我的完整屏幕活动中,我通过
String fullScreenImage = (String) getIntent().getCharSequenceExtra("FullScreenPicture");

我曾考虑过打包复杂的数据对象并将其与新的意图一起发送,但这肯定不是最佳实践。如果我走这条路,特别是重新下载所有的缩略图,或者丢失输入到表单中的数据,还有其他对用户不好的地方。

最佳答案

我建议覆盖onSaveInstanceState(),在那里保存数据,在onCreate()内部从savedInstanceState获取保存的数据。更多信息请参见documentation

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    // Save your data here with savedInstanceState.put<something>...
}

如果您的数据是复杂的(不是字符串、int或某种简单类型),您可以编写一个方法将其保存到Bundle(可以放入savedInstanceState包中的内容)和另一个方法来解析包并从中恢复数据。但储存这样的图像不是个好主意…你可以把它们缓存在SD卡上(例如在你的应用程序的数据目录中,但不在内存中)。
另一个选项是在全屏对话框中显示“full screen activity”的内容,而不是活动,这样细节活动就不会在后台被破坏。

08-18 17:46