Android:如何使活动返回结果给调用它的活动?


128

我有一个Location可以从许多活动(例如Sign up和)中调用的活动OrderLocation用户在活动中输入自己的位置,因此活动Location会将这个新位置返回给调用它的那个活动。

因此,当Sign up活动调用Location活动时,它必须将数据返回给Sign up活动。下一次Order活动将做同样的事情。

注意

我知道您会告诉我我应该发布代码,但是我并不是要您给我代码;我只想要一些技巧,链接或好的主题。


您可以使用finish()调用来返回
。.– Harshid


@Harshid,请给我更多详细信息,或者如果您有链接将不胜感激
用户用户

Answers:


253

为了启动一个应将结果返回到调用方活动的活动,您应该执行以下操作。您应按如下所示传递请求代码,以识别您是从开始的活动中获得结果的。

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

在活动中,您可以利用setData()返回结果。

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

因此,在第一个活动中再次在onActivityResult()中编写以下代码

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

根据您的评论进行编辑: 如果您想返回三个字符串,则可以通过有意使用键/值对而不是Uri来实现。

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

像下面这样在onActivityResult中获取它们:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

你说什么 我不明白您的最后评论,对不起,我的英语不好,我正在尝试输入您的代码,我requestcode可以输入任何整数?
用户用户

1
我说,没有问题(NP),正如您所说的那样,您可能在实施此功能时可能很晚。进入requestcode,是的,您可以给一个整数值,例如int requestCode = 1;。
2013年

是的,这是正确的工作,我接受您的回答,非常感谢,我想向您询问是否有办法发送不仅仅是字符串,我想发送3个字符串,例如“ city”,“ street”,“ home”,有没有一种方法来标记字符串?
用户用户

您的答案非常好,如果需要,可以编辑标题,以便许多用户可以搜索它
用户用户

我一直在寻找创建意图的方法new Intent(this, OtherActivity.class);我可以在Activity中使用此代码。
用户

3

如果要结束操作并仅添加一个resultCode(没有数据),可以setResult(int resultCode)在之前致电finish()

例如:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

然后在您的通话活动中,检查resultCode,看看是否还好。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

别忘了用调用活动startActivityForResult(intent, someCustomRequestCode)


4
的值Activity.RESULT_OK实际上是-1,以防混淆。我只是建议使用这些Activity常数
jacoballenwood
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.