如何在Android中从子活动返回结果到父活动?

10

我在父Activity中点击一个按钮时启动了一个子Activity。在子Activity中计算了一些结果(字符串类型),并且完成之后返回到父Activity。是否有更好的方法可以使用意图或额外信息来获取父Activity中的结果?(我可以在子Activity中将结果变量设置为公共和静态变量来在父Activity中获取该结果)。请帮助我,我是Android开发的新手。

startActivityForResult(new Intent(ParentActivity.this, ChildActivity.class), ACTIVITY_CONSTANT);

在Parent的onActivityResult()方法中应该写些什么?

2个回答

29

你可以使用 putExtras() 方法在不同的活动之间传递数据,而不是使用 startActivityForResult(new Intent(ParentActivity.this, ChildActivity.class), ACTIVITY_CONSTANT);

在子活动中:

Intent data = new Intent();
data.putExtra("myData1", "Data 1 value");
data.putExtra("myData2", "Data 2 value");
// Activity finished ok, return the data
setResult(RESULT_OK, data);
finish();

在父活动中,您可以重写onActivityResult()方法,并在该方法内使用Intent参数。通过此方法的Intent参数,您可以检索从子活动传递的额外值,例如intent.getStringExtra或intent.getSerializableExtra。

例如:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
        if (data.hasExtra("myData1")) {
            Toast.makeText(this, data.getExtras().getString("myData1"),
                Toast.LENGTH_SHORT).show();
        }
    }
}

1
在调用 setResult(...) 之后,您需要调用 finish() 来关闭“子”活动。 - Thomas Decaux
@ThomasDecaux 已经包含了 finish() 方法。感谢您指出所需的内容。 - Paresh Mayani
1
谢谢提供示例,它对我很有帮助。 - Mythul
1
在这种情况下,REQUEST_CODE 是来自示例的 ACTIVITY_CONSTANT。 - Ghita Tomoiaga
您好,@PareshMayani先生。在我的情况下,当我从我的库中调用setResult时,它没有被我的主应用程序接收到。 - Ajay
显示剩余3条评论

4

在父活动中

Intent intent = new Intent(getApplicationContext(), yourChildActivity.class);
intent.putExtra("key", "value");
startActivityForResult(intent, ACTIVITY_CONSTANT);

在子活动中通过向父活动发送返回结果的方式进行通信。
Intent data = new Intent();
data.putExtra("key1", "value1");
data.putExtra("key2", "value2");
// Activity finished return ok, return the data
setResult(RESULT_OK, data);
finish();

在父活动中获取子活动的结果信息
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
        if (data.hasExtra("key1") && data.hasExtra("key2")) {
            Toast.makeText(
                this,
                "Your reult is :  "data.getExtras().getString("key1") + " " + data.getExtras().getString("key2"),
                Toast.LENGTH_SHORT).show();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接