0

在我的程序中,有一些文本字段和一个打开相机意图的按钮。(假设页面名称是 mainIntent)...假设用户填写文本字段并单击按钮;cameraIntent 打开,用户拍摄照片。现在,我希望程序返回具有文本字段和按钮的页面。但如果我这样做

Intent i = new Intent(cameraIntent.this, mainIntent.class);
startActivity(i);

用户写的所有文字都不见了。我需要使用return mainIntent我想的东西......

有人能帮我吗?

4

2 回答 2

3

您需要覆盖 onSaveInstanceState(Bundle savedInstanceState) 并将要更改的应用程序状态值写入 Bundle 参数,如下所示:

@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");
}

您通常会使用这种技术来存储应用程序的实例值(选择、未保存的文本等)。

于 2013-01-07T11:57:45.143 回答
3

在第一个活动中使用startActivityForResult 。因此,您将能够返回调用活动。而且您不会丢失编辑文本的数据。

Intent i = new Intent(mainIntent.this, cameraIntent.class);
startActivityForResult(i, MY_REQ_CODE);

您可以将其添加为onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data)
      {
      switch(requestCode) {
      case MY_REQ_CODE: 
            if (resultCode == RESULT_OK) {
                //Do action that's needed
                break;
            }

      }
}

在您的活动下一个活动中,您只需要调用setResult()finish()如下所示。您无需在此处开始新活动:

Intent returnIntent = new Intent();
returnIntent.putExtra("ImageName",imgName);   //Required if you want to pass some data back
setResult(RESULT_OK,returnIntent);        
finish(); 

希望能帮助到你。

于 2013-01-07T12:15:16.910 回答