将数据传回暂停活动

时间:2011-01-17 14:36:00

标签: android android-activity

我在使用意图在我的活动之间传递数据时遇到了一些麻烦,特别是当我暂停当前活动时将数据传递给某个以前的活动时,这似乎是个问题。

从第一个活动开始,我就这样开始:

//Create the activity we want to run and place it in an Intent
  Intent i = new Intent(activity, JVoiceActivity.class);

  //Create a bundle for passing some data.
  Bundle b = new Bundle();

  //Pass that this is a recording.
  b.putBoolean("Record", true);
  i.putExtras(b);

  //Start it.
  activity.startActivityForResult(i, 0);

我使用activity而不仅仅是startActivityForResult的原因是因为这是我传递活动以保持项目面向对象的另一个类。

然后在新的Activity上,我这样关闭它:

 public void onPause()
 {   
   Bundle bundle = new Bundle();

   bundle.putString("Path", mPath);
   Intent i = new Intent();

   i.putExtras(bundle);

   setResult(RESULT_OK, i);

   super.onPause();
 }

最后在第一个Activity中我有函数:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
  if(data!= null)
  {

正在调用此函数,但Intent数据始终为null。我正在假设它关闭第二个活动的方式,因为我在测试它之前确实有这个工作,当我在设置mPath用于测试目的后直接从我的第二个活动调用Finish()时。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

要看的一些想法:

  • 当启动的Activity调用finish()时,结果将仅发送回调用Activity(参见http://developer.android.com/reference/android/app/Activity.html#finish%28%29
  • onPause并不意味着您的活动正在完成,只是它暂停。例如,如果用户按下后退按钮,它将暂停,但不会完成活动。 (请参阅活动生命周期文档)
  • 在onActivityResult中,您应该检查requestCode。我怀疑你得到了RESULT_CANCELED,因为在返回之前被调用的Activity没有正确完成()。

答案 1 :(得分:0)

onPause方法旨在处理何时关闭您的活动。所以它不应该使用setResult()方法。将setResult放在某个事件上并在结尾处调用finish()。

答案 2 :(得分:0)

你不应该从onPause()调用setResult(),因为它太晚了 - 结果是在finish()方法中设置的,该方法在onPause()方法之前被调用。相反,您可以调用setResult()表单onBackPressed()或在调用finish()之前执行的任何其他方法