Roboguice (снимок 1.1 и 1.2) вставляет неверный контекст в onActivityResult - PullRequest
0 голосов
/ 12 сентября 2011

onActivityResult () - это стандартная функция Android, которая вызывается после закрытия дочернего действия. Однако, похоже, он не закрывается полностью.

После того, как мое дочернее действие заканчивается, в родительском вызывается onActivityResult (). На этом этапе мое действие заключается в том, чтобы добавить контекст (через провайдера, без помощи) в новый класс, создаваемый родителем, с использованием информации, которую парцелла только что вернула мне для параметра @Assisted в этом новом классе. учебный класс.

Однако, несмотря на то, что метод final () вызывается для дочернего элемента, вводимый контекст - это не родительский элемент, а дочерний! Это убивает программу.

Как мне обойти это?

Вот код, который дает вам представление о том, что я делаю.

В родительском:

@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)

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Да, это не получится в RoboGuice 1.1.Activity.onActivityResult() является несколько необычным методом, поскольку он выполняется до вызова onResume () действия, поэтому RoboGuice не знает, как переключить контекст обратно на действие вызывающей стороны.

Одно из основных изменений в RoboGuice1.2 это исправить это поведение.Если вы переключитесь на 1.2 и замените каких-либо провайдеров на ContextScopedProviders в соответствии с этими инструкциями , вам будет хорошо.

Если вам нужно остаться с RoboGuice 1.1, вы сможете охватить своиКонтекст вручную следующим образом:

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

        ...

    } finally {
        scope.exit(this);
    }
}
0 голосов
/ 12 сентября 2011

В методе ActivityForResult в Android ваш код запроса должен быть одинаковым как в файле Activity.then, так и только тогда ваш код будет работать. Я надеюсь, что это поможет вам.

...