我有2个活动,父母和孩子。 Parent充当Widget配置类,因为它处理APPWIDGET_CONFIGURE的intent过滤器。
选择Parent上的项目启动Child进行编辑。
Intent addNewIntent = new Intent(this,Child.class);
this.startActivityForResult(addNewIntent, EDIT_ACTIVITY_REQUEST);
Child返回结果
...
setResult(RESULT_OK, resultIntent);
finish();
调用Parent类中的onActivityResult并处理结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode){
//EditShortcutActivity returned
case EDIT_ACTIVITY_REQUEST:
if(resultCode == RESULT_OK) {
...
当AppWidget添加到主屏幕时,Parent活动将从APPWIDGET_CONFIGURE意图启动。可以启动Child活动并调用Parent.onActivity结果。工作正常。
从Parent中选择一个项目后,将调用 finish()并正确配置该窗口小部件。父活动已关闭,并显示主屏幕。
现在,如果用户再次从概览屏幕(最近的应用程序选择器)选择父活动,则用户选择要编辑的项目,再次打开子活动。保存更改后,这次不会在Parent活动中调用 onActivityResult()。
此外, getCallingActivity()仅在这种情况下在Child活动中返回null。
我认为这与启动Parent的Task有关,因为它是从AppWidget配置启动的。
如何可靠地调用 onActivityResult()?
谢谢!
修改
我从未弄清楚为什么会发生这种情况,但我找到了解决方法。当调用Activity来配置Widget时,我通过向Intent附加标志手动将其从历史堆栈中删除。
Intent currentIntent = getIntent();
currentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
setIntent(noBackstack);
当活动从启动器正常启动时,它将显示在历史记录(概述)中并按预期工作。当启动配置AppWidget时,它不再显示在历史记录中。
希望这有助于某人。
答案 0 :(得分:0)
我永远无法可靠地调用onActivityResult
。我想出了一个解决办法。
在启动配置窗口小部件时从历史记录堆栈中删除活动。有关代码,请参阅编辑。