【发布时间】:2016-09-08 22:35:00
【问题描述】:
我在应用的文件夹选择器部分有以下活动序列:
活动 A 启动 B。 B 然后启动自身的实例,随着用户深入文件夹树而堆叠。每当 B 的实例完成(选择文件夹)时,它和所有前面的 B 都应该完成,并且应该再次显示 A,并传播的结果。如果用户回溯,前面的B应该不会结束,因为用户应该能够在文件夹子树之间来回切换。
我正在尝试通过使用 startActivityForResult 来完成此操作,从 A 到 B,然后对于 B 的每个新实例。当用户完成一个实例 B 时,我使用 setResult 并希望在每个前面的实例的 onActivityResult 方法中检查它。如果是 RESULT_OK,我再次设置结果并完成该实例,直到所有这些都以级联序列完成并且 A 再次显示结果。
只要我去 A => B(1) => B(2) => B(3) 并完成,在 B 部分没有回溯。
但是,如果我去 A => B(1) => B(2) => 回到 B (1) => B(3) 并完成,onActivityResult 仅在 B(1) 从 B(2) 返回时调用 第一次,而不是我后来从 B(3) 完成时回到它。 B(1) 在此序列中从 B(3) 返回时只是简单地恢复。这会破坏级联完成顺序。
为什么 onActivityResult 对于实例 B(1) 只调用一次?每次子活动设置结果并完成时不应该调用它吗?
这里有一些代码:
=== 活动 A:
启动第一个 B 实例:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(intent, RequestCodes.ActivityB);
收到最终的B结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
...
}
}
=== 活动 B:
从自己开始新的孩子B:
Intent intent = new Intent(ActivityB.this, ActivityB.class);
startActivityForResult(intent, RequestCodes.ActivityB);
选择文件夹时设置结果:
Intent result = new Intent();
result.putExtra(...);
setResult(Activity.RESULT_OK, result);
finish();
接收子 B 导致每个父 B 实例(由于某种原因仅在 B(1) 中第一次调用):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
setResult(Activity.RESULT_OK, data);
finish();
}
}
提前致谢。
【问题讨论】:
-
在最后一种方法中你应该改为
setResult(..., data)这是一个错字还是一个错误? -
这是一个错字,是的,它是代码中的数据。谢谢。
标签: android android-activity android-navigation