0

onActivityResult() 是一个标准的 Android 函数,在子 Activity 关闭后调用。但是,它似乎并没有完全关闭。

在我的子活动完成后,在父项中调用 onActivityResult()。在这一点上,我的动作是在父创建的新类中注入上下文(通过提供者,非辅助),使用孩子刚刚返回给我的可打包信息作为新的 @Assisted 参数班级。

然而,尽管对子进程调用了 finish(),但注入的上下文不是父进程——而是子进程!这会杀死程序。

我该如何解决这个问题?

这是一些代码,可以让您了解我在做什么。

在父级中:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_NEW_EXERCISE)
        {
            if (resultCode == RESULT_OK)
            {
                EntityExercise exercise = (EntityExercise)data.getExtras().get("exercise");
                addNewRoutineExerciseDetail(exercise);
                //Toast.makeText(this, exercise.getName(), Toast.LENGTH_LONG).show();
            }
        }
    }

    public RoutineExerciseDetail addNewRoutineExerciseDetail(EntityExercise exercise)
    {
        RoutineExerciseDetail detail = detailFactory.create(exercise);
        detail.setOnClickRelativeLayoutListener(mEditParamsOnClickListener);
        return detail;
    }

在孩子身上:

View.OnClickListener mListenerReturnExercise = new View.OnClickListener()
    {

        @Override
        public void onClick(View v) {
            Intent resultIntent = new Intent();
            resultIntent.putExtra("exercise", (EntityExercise)v.getTag()); //Assuming it's the tag
            setResult(Activity.RESULT_OK, resultIntent);
            finish();
        }

    };

RoutineExerciseDetail的构造函数参数:

@Inject
    public RoutineExerciseDetail(ActivityBaseRoboOrm<DatabaseHelper> context, List<RoutineExerciseDetail> list,
            @AddEditExercise TableLayout layout, @Assisted EntityExercise exercise)
4

2 回答 2

1

是的,这将在 RoboGuice 1.1 上失败。 Activity.onActivityResult()是一种有点不寻常的方法,因为它在调用活动的 onResume() 之前执行,因此 RoboGuice 不知道将上下文切换回调用者活动。

RoboGuice 1.2 的主要更改之一是修复此行为。如果您切换到 1.2 并按照这些说明将任何提供程序替换为 ContextScopedProviders ,那么您应该一切顺利。

如果您需要继续使用 RoboGuice 1.1,您应该能够通过以下方式手动设置上下文范围:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    scope.enter(this);
    try {

        ...

    } finally {
        scope.exit(this);
    }
}
于 2011-09-13T14:06:40.493 回答
0

在 Android 的 ActivityForResult 方法中,您的请求代码在 Activity.then 中应该相同,只有这样您的代码才能工作。我希望它会帮助你。

于 2011-09-12T09:20:18.150 回答