java - 打开新 Activity 而不丢失父 Activity

标签 java android android-intent

我有一个 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/

相关文章:

java - Android:我应该避免在 Commonsware 的 WakefulIntentservice 中使用自己编写的方法吗?

java - 如何让这个算法变得懒惰呢? ( java )

android - 同步 CursorLoader 测试用例的最佳实践

android - 进度条 ICS

android - 从捕获的 DownloadManager Intent 中检索文件路径

Java 连接并执行数据库语句而不阻塞程序

java - 如何正确地将滤镜应用于图像阵列?

没有操作栏的Android滑动菜单

android - 为什么键盘出现在 TabBar 之后?

Android:使用 LocationManager.requestLocationUpdates() 时如何从 Intent bundle 中获取位置信息