0

我正在开发一个 Android 应用程序,我需要打开 pdf 文件并在按下后退按钮时返回相同的活动。

问题

我使用意图和启动活动正确打开了 pdf 文件(来自 ActivityOne),但是当我按下后退按钮时,我在 ActivityOne(和以前的活动)中拥有的所有数据都已丢失。

这是我显示pdf的开始活动代码:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
            +"/"+ myApplication.getUsuarioActual().getFacturaActual().getPdf());
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.setType("application/pdf");
startActivity(intent); 

我该怎么做才能解决这个问题?当我打开另一个应用程序并关闭它时也会发生同样的情况:当返回我的应用程序时,它显示一个错误,指出所有数据为空。

编辑

在阅读了那个问题之后,正如@TheCharliemops 向我推荐的那样,我知道这是我需要的,但我还有另一个与此相关的问题。

我有一个myApplication扩展Application来维护全局应用程序状态的类,我在其中保存我在不同活动中读/写的所有数据。

我的问题是我是否必须保存我myApplication在每个活动中使用的所有数据,onSaveInstanceState或者有一些最简单的方法来做到这一点。

4

1 回答 1

1

首先,欢迎来到 SO!!

在这里,@reto-meier 解释了如何在 Android 中保存活动状态。我认为这可以解决你的问题。我将他的代码放在这里,以供将来遇到类似问题的人使用。

他说你必须覆盖onSaveInstanceState(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceState)如下代码所示:

Reto Meier 说:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // etc.
}

Bundle 本质上是一种存储 NVP(“名称-值对”)映射的方式,它将被传递到onCreateonRestoreInstanceState提取值的位置,如下所示:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

我希望这可以帮助你。

问候!

于 2013-07-05T08:19:44.740 回答