【发布时间】:2019-09-27 22:13:24
【问题描述】:
Activity A 位于堆栈的根部,然后我 startActivityForResult B,然后从 B startActivityForResult C 并完成 B.. 因此堆栈现在是 A-C。
但是,当我在 C 中设置结果并完成它时,活动 A 没有收到此结果。这可能吗?
【问题讨论】:
标签: android stack start-activity
Activity A 位于堆栈的根部,然后我 startActivityForResult B,然后从 B startActivityForResult C 并完成 B.. 因此堆栈现在是 A-C。
但是,当我在 C 中设置结果并完成它时,活动 A 没有收到此结果。这可能吗?
【问题讨论】:
标签: android stack start-activity
您可以以“开始活动 C”的结果结束活动 B,然后开始活动 C 以获得活动 A 的结果...
【讨论】:
不是使用Activity B的上下文启动Activity C,而是使用Activity A本身的上下文启动它以获得结果,这样当你在C中设置结果并完成它会返回到A。
【讨论】:
如果您想将 Activity C 的结果传递回 Activity A:
在活动 A 中调用 B:
Intent showB = new Intent(ActivityA, ActivityB);
startActivityForResult(showB, RequestCode);
在活动 B 中调用 C:
Intent showC = new Intent(ActivityC);
showC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(showC);
finish();
在活动 C 中:
//set the result code and close the activity
Intent result = new Intent();
setResult(RESULT_OK, result);
finish();
在活动 A 中:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
doSomeStuffIfRequestCodeMatched()
}
【讨论】:
startActivityForResult 现已弃用,最好使用registerForActivityResult。
我建议实现一个模式,您可以在其中将结果数据保存在 Activity C 中,然后完成 Activity C,以便 Activity A 出现在顶部,在 Activity A 的 onresume() 中,您可以使用以下命令访问 Modal 中的数据一些条件并进行必要的操作...
【讨论】:
class A extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
// code.........
Button button=findViewById(R.id.btn_id);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent=new Intent(A.this,B.class);
startActivityForResult(intent, 1001);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK )
{
if(requestCode==1001)
{
Intent intent=new Intent(A.this,C.class);
startActivityForResult(intent, 1002);
}
else if(requestCode==1003)
{
//here you will get the result form c
}
}
}
}
【讨论】: