gpt4 book ai didi

java - Roboguice(1.1 和 1.2 快照)在 onActivityResult 中注入(inject)错误的上下文

转载 作者:行者123 更新时间:2023-12-01 15:44:24 25 4
gpt4 key购买 nike

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

我的子 Activity 完成后,在父 Activity 中调用 onActivityResult()。此时,我的操作是在父级正在创建的新类中注入(inject)上下文(通过提供者,非辅助),使用子级刚刚返回给我的可分割信息作为该新类中的 @Assisted 参数类(class)。

然而,尽管在子进程上调用 finish(),注入(inject)的上下文并不是父进程——而是子进程!这会终止程序。

我该如何解决这个问题?

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

在父级中:

@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;
}

在 child 中:

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)

最佳答案

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

RoboGuice 1.2 中的主要更改之一是修复此行为。如果您切换到 1.2 并根据 these instructions 将任何提供程序替换为 ContextScopedProviders ,你应该可以走了。

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

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

...

} finally {
scope.exit(this);
}
}

关于java - Roboguice(1.1 和 1.2 快照)在 onActivityResult 中注入(inject)错误的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7385100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com