返回 android 时如何获取输入数据
how to get input data when go back in android
我是 android 开发的新手。
我创建了一个 android 应用程序并使用 activity(first activity) 来输入一些数据。然后我使用它上面的一个按钮转到另一个 activity(第二个 activity)。当我按下设备上的后退按钮时(此时我在第二个 activity 上),我在第一个 activity 上看不到任何数据。我使用一个对象(Bean)来存储输入数据并将其传递给第二个 activity.
我的问题是如何将该数据重新加载到第一个 activity?
任何评论将不胜感激!
这是第一个 activity 开始第二个 activity 的代码。
Intent intent=new intent(this,SecondActivity.class);
intent.putExtra("Example",bean);
startActivity(intent);
转到第一个的代码activity
public boolean onKeyDown(int keyCode,KeyEvent event){
final ExampleBean bean=(ExampleBean)getIntent().getSerializableExtra("Example");
if(keyCode==KeyEvent.KEYCODE_BACK){
Intent intent=new intent(this,FirstActivity.class);
intent.putExtra("Example",bean);
startActivity(intent);
return true;
}
return super.onKeyDown(keyCode,event);
}
您应该在导航到新 Activity 时简单地使用 FLAG_ACTIVITY_NEW_TASK
,这样它会打开一个新的 activity,而您的旧 activity 仍然存在并且您的数据是单击后退按钮时保留。
Intent intent=new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
当您开始一个新的 activity 时,原来的 activity 进入暂停状态 state.You 应该编写代码以在原始 activity 的 onResume() 中加载您的数据。
这将确保当您从新 activity
返回到原始 activity 时加载您的数据
在FirstActivity中,向SecondActivity发送数据:
// your button or trigger to start the second activity
int someNumber = 10;
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("KEY_SENDING_DATA", someNumber);
int requestCode = 1;
startActivityForResult(intent, requestCode);
重要事项:
- 密钥
KEY_SENDING_DATA
必须与 SecondActivity 上使用的密钥相同才能获得您传递的额外内容
startActivityForResult
是让 FirstActivity 期待一些结果的原因
- 我们传递给
startActivityForResult
的号码 1
是请求代码。我们将使用此请求将数据从 SecondActivity 获取到 FirstActivity。
在SecondActivity中,从FirstActivity接收数据:
// this would possibly go in onCreate, but could be anywhere
Intent extraIntent = getIntent();
int numberReceived = extraIntent.getIntExtra("KEY_SENDING_DATA", -1);
注意这里的-1
。这是此 int 的默认值,以防我们不传递数字(通常在出现问题时)。
现在,将数据从 SecondActivity 发送回 FirstActivity。
在第二个活动中:
// again, this would be inside of a button or some other trigger
Intent result = new Intent();
int myFinalResult = 101;
result.putExtra("KEY_FINAL_RESULT", myFinalResult);
setResult(RESULT_OK, result);
finish();
注意这只是关闭了 activity 而没有引用 FirstActivity。
并在 FirstActivity 中接收它:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == 1 && resultCode == RESULT_OK)
{
int result = data.getIntExtra("KEY_FINAL_RESULT", -1);
// if you're receiving a serializable object
MyCustomObject myObject = (MyCustomObject)data.getExtras().getSerializable("KEY_FINAL_RESULT");
}
}
应该就可以了。
通常您将键设置为静态字符串和整数,这样您就不会对调用的内容感到困惑,但应该仅此而已。
爱德华多
我是 android 开发的新手。 我创建了一个 android 应用程序并使用 activity(first activity) 来输入一些数据。然后我使用它上面的一个按钮转到另一个 activity(第二个 activity)。当我按下设备上的后退按钮时(此时我在第二个 activity 上),我在第一个 activity 上看不到任何数据。我使用一个对象(Bean)来存储输入数据并将其传递给第二个 activity.
我的问题是如何将该数据重新加载到第一个 activity? 任何评论将不胜感激!
这是第一个 activity 开始第二个 activity 的代码。
Intent intent=new intent(this,SecondActivity.class);
intent.putExtra("Example",bean);
startActivity(intent);
转到第一个的代码activity
public boolean onKeyDown(int keyCode,KeyEvent event){
final ExampleBean bean=(ExampleBean)getIntent().getSerializableExtra("Example");
if(keyCode==KeyEvent.KEYCODE_BACK){
Intent intent=new intent(this,FirstActivity.class);
intent.putExtra("Example",bean);
startActivity(intent);
return true;
}
return super.onKeyDown(keyCode,event);
}
您应该在导航到新 Activity 时简单地使用 FLAG_ACTIVITY_NEW_TASK
,这样它会打开一个新的 activity,而您的旧 activity 仍然存在并且您的数据是单击后退按钮时保留。
Intent intent=new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
当您开始一个新的 activity 时,原来的 activity 进入暂停状态 state.You 应该编写代码以在原始 activity 的 onResume() 中加载您的数据。 这将确保当您从新 activity
返回到原始 activity 时加载您的数据在FirstActivity中,向SecondActivity发送数据:
// your button or trigger to start the second activity
int someNumber = 10;
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("KEY_SENDING_DATA", someNumber);
int requestCode = 1;
startActivityForResult(intent, requestCode);
重要事项:
- 密钥
KEY_SENDING_DATA
必须与 SecondActivity 上使用的密钥相同才能获得您传递的额外内容 startActivityForResult
是让 FirstActivity 期待一些结果的原因- 我们传递给
startActivityForResult
的号码1
是请求代码。我们将使用此请求将数据从 SecondActivity 获取到 FirstActivity。
在SecondActivity中,从FirstActivity接收数据:
// this would possibly go in onCreate, but could be anywhere
Intent extraIntent = getIntent();
int numberReceived = extraIntent.getIntExtra("KEY_SENDING_DATA", -1);
注意这里的-1
。这是此 int 的默认值,以防我们不传递数字(通常在出现问题时)。
现在,将数据从 SecondActivity 发送回 FirstActivity。
在第二个活动中:
// again, this would be inside of a button or some other trigger
Intent result = new Intent();
int myFinalResult = 101;
result.putExtra("KEY_FINAL_RESULT", myFinalResult);
setResult(RESULT_OK, result);
finish();
注意这只是关闭了 activity 而没有引用 FirstActivity。
并在 FirstActivity 中接收它:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == 1 && resultCode == RESULT_OK)
{
int result = data.getIntExtra("KEY_FINAL_RESULT", -1);
// if you're receiving a serializable object
MyCustomObject myObject = (MyCustomObject)data.getExtras().getSerializable("KEY_FINAL_RESULT");
}
}
应该就可以了。
通常您将键设置为静态字符串和整数,这样您就不会对调用的内容感到困惑,但应该仅此而已。
爱德华多