我有一个Location
活动可以从许多活动中调用,例如Sign up
和Order
。在Location
活动中,用户输入了他的位置,因此活动Location
会将此新位置返回到调用该活动的活动。
因此,当Sign up
活动调用Location
活动时,它必须将数据返回到Sign up
活动。另一次Order
活动将做同样的事情。
我知道你会告诉我我应该发布代码,但我不是要你给我代码;我只想要一些提示,链接或好线程。
答案 0 :(得分:203)
为了启动一个应该将结果返回给调用活动的活动,你应该做类似下面的事情。您应该传递如下所示的请求代码,以便确定您从您开始的活动中获得了结果。
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");
}
}
}
答案 1 :(得分:4)
2021 年 2 月更新
与 Activity v1.2.0 和 Fragment v1.3.0 一样,引入了新的 Activity Result APIs
。
活动结果 API 提供了用于注册结果、启动结果以及在系统分派结果后处理结果的组件。
因此无需再使用 startActivityForResult
和 onActivityResult
。
为了使用新的 API,您需要在源 Activity 中创建一个 ActivityResultLauncher,指定将在目标 Activity 完成并返回所需数据时运行的回调:
private val intentLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
result.data?.getStringExtra("streetkey")
result.data?.getStringExtra("citykey")
result.data?.getStringExtra("homekey")
}
}
然后,随时启动您的意图:
intentLauncher.launch(Intent(this, YourActivity::class.java))
要从目标 Activity 返回数据,您只需添加一个包含返回值的 Intent 到 setResult()
方法:
val data = Intent()
data.putExtra("streetkey", "streetname")
data.putExtra("citykey", "cityname")
data.putExtra("homekey", "homename")
setResult(Activity.RESULT_OK, data)
finish()
有关任何其他信息,请参阅Android Documentation
答案 2 :(得分:1)
如果您想完成并只添加resultCode
(没有数据),可以在setResult(int resultCode)
之前致电finish()
。
例如:
...
if (everything_OK) {
setResult(1); // OK!
finish();
}
else {
setResult(-1); // some error ...
finish();
}
...
然后在您的通话活动中,检查resultCode
,看看我们是否正常。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == someCustomRequestCode) {
if (resultCode == 1) {
// OK!
}
else if (resultCode = -1) {
// something went wrong :-(
}
}
}
不要忘记使用startActivityForResult(intent, someCustomRequestCode)
调用活动。
答案 3 :(得分:0)
您的错误在resultCode = Activity.RESULT_CANCELED
中,您应该像resultCode == Activity.RESULT_CANCELED
==
答案 4 :(得分:-5)
您可以致电finish()
喜欢这个
@Override
public void onBackPressed() {
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
}