我正在开发一个Android应用程序,我需要打开pdf文件并在按下后退按钮时返回相同的活动。
问题
我使用intent和starting活动正确打开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);
我该怎么做才能解决这个问题?当我打开另一个应用程序并关闭它时也会出现同样的情况:当返回到我的应用程序时,它会显示一条错误,指出所有数据都为空。
修改
在阅读that question后,@ TheCharliemops推荐我,我知道这是我需要的,但我有另外一个问题。
我有一个myApplication
类扩展Application
以维护全局应用程序状态,我保存在不同活动中读/写的所有数据。
我的问题是,如果我必须使用myApplication
保存onSaveInstanceState
中每个活动中的所有数据,或者有一些最简单的方法来执行此操作。
答案 0 :(得分:1)
最重要的是,欢迎来到SO !!
Here,@ 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(“名称 - 值对”)地图的方式,它将被传递到onCreate
以及onRestoreInstanceState
,您可以在其中提取值这样:
@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");
}
我希望这会对你有所帮助。
问候!