0

onActivityResult() は、子アクティビティが閉じた後に呼び出される標準の Android 関数です。ただし、完全には閉まらないようです。

子アクティビティが終了すると、親で 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

はい、これはRoboGuice1.1では失敗します。 Activity.onActivityResult()は、アクティビティのonResume()が呼び出される前に実行されるという点で、やや珍しいメソッドです。したがって、RoboGuiceは、コンテキストを呼び出し元のアクティビティに戻すことを認識していません。

RoboGuice 1.2の主な変更点の1つは、この動作を修正することです。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 に答える