我有一个主要的活动场景。
我有三个活动A,B,C
现在我要从A呼叫C
A-> C
在C中,我有onBackPress
使用startActivity作为结果的相同方式
B-> C
所以在我的A和B中,我使用StartActitivity来获取结果并保持在OnActivityForResult中。
活动A
Intent i = new Intent(this, AddNewAddress.class);
i.putExtra("addresstype", addressType);
startActivityForResult(i, 10);
在A的OnActivityResult
中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
switch (requestCode) {
case (10): {
// do this if request code is 10.
addressType=data.getStringExtra("MESSAGE");
getAddressList(userId,addressType);
mAdapter.notifyDataSetChanged();
addrListModels.clear();
}
break;
}
}
我也在B中做同样的事情。...
现在在C
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent=new Intent();
intent.putExtra("MESSAGE",addresstype);
setResult(10,intent);
finish();
}
崩溃正在发生
java.lang.RuntimeException:无法交付结果ResultInfo
答案 0 :(得分:1)
用C的super.onBackPressed();
方法删除onBackPressed
,请尝试一下。
答案 1 :(得分:0)
Intent i = new Intent(this, AddNewAddress.class);
i.putExtra("addresstype", addressType);
startActivityForResult(i, 10);
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent=new Intent();
intent.putExtra("MESSAGE",addresstype);
setResult(RESULT_OK,intent);
finish();
}
onActivityResult use RESULT_OK
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 10:
}
}
}
答案 2 :(得分:0)
@jiajiagu的响应没问题,如果您使用super.onBackPressed
,请不要致电finish
。
但是,就像@ mayur-panchalw试图说的那样,如果您使用startActivityForResult
,则不需要返回requestCode
。
系统已经知道哪个Activity
正在返回。
您需要返回resultCode
。
ResultCode可以是RESULT_OK
或RESULT_CANCELED
。
因此,完成“活动”使用后
setResult(RESULT_OK, intent);
finish();
在onActivityResult
中测试requestCode
以确定返回哪个Activity
,并resultCode
知道结果是否成功。