onActivityResult не вызывается после того, как дочерняя активность вызывает finish()

Хотя есть несколько вопросов по этой теме, я не смог найти на них правильный ответ.

У меня есть основное действие (это одно действие во вкладке), откуда я вызываю действие входа в систему.

    Button chdbtn=(Button)findViewById(R.id.Add);
    chdbtn.setOnClickListener(new OnClickListener() {   
        @Override
        public void onClick(View v) {
        Intent myIntent = new Intent(main.this, Login.class);
            startActivityForResult(myIntent, 1001);
    }
    }); 


protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == 1001)
        {
            if(resultCode == RESULT_OK)
            {
                          Log.i("Info","Inside");
            }
        }
}

И в моем классе входа в систему, когда я нажимаю кнопку, я делаю это

    Button chdbtn=(Button)findViewById(R.id.Addchild); 
    chdbtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
                Intent Ireturn = new Intent();
                setResult(RESULT_OK,Ireturn);
                finish();
        }
    });

Но когда я нажимаю кнопку при входе в систему, элемент управления не переходит к основным действиям метода onActivityResult. Может ли кто-нибудь направить меня, в чем проблема.


VIJAYapp.sample.ChildEntry1$1/onClick:23

INFO/ActivityManager(59): Запуск активности: Intent { cmp=app.sample/.ChildLogin }

WARN/ActivityManager(59): startActivity вызывается из контекста, отличного от Activity; форсирование Intent.FLAG_ACTIVITY_NEW_TASK для: Intent { cmp=app.sample/.ChildLogin }

DEBUG/PhoneWindow(999): не удалось сохранить, какое представление имеет фокус, потому что сфокусированное представление com.android.internal.policy.impl.PhoneWindow$DecorView@43e4b620 не имеет идентификатора.

INFO/ActivityManager(59): отображаемая активность app.sample/.ChildLogin: 460 мс (всего 460 мс)

INFO/VIJAY(999): VIJAYapp.sample.ChildLogin$1/onClick:24


Выше приведен лог, который я получаю при нажатии на кнопки. Я вижу, что есть какая-то проблема с активностью. Есть ответы?


person Vijay Nag    schedule 14.06.2011    source источник
comment
Если вы отлаживаете и ставите точку останова в строке if(requestCode == 1001), происходит ли это? Я подозреваю, что ваш onActivityResult вызывается, он просто не попадает в ваше сообщение журнала.   -  person dymmeh    schedule 14.06.2011
comment
проверьте значение RESULT_OK, одинаково ли оно в обоих классах   -  person Sunil Kumar Sahoo    schedule 14.06.2011
comment
Я уже пытался поставить точку останова при запуске функции onActivityResult, но она так и не сработала. Я поставил операторы журнала в начале всех функций для печати файла, функции и номера строки, и вот что я получаю   -  person Vijay Nag    schedule 14.06.2011
comment
06–14 20:24:33.689: ОШИБКА/ВИДЖАЙ (586): VIJAYapp.sample.ChildEntry1$1/onClick:46 06–14 20:24:50.370: ОШИБКА/ВИДЖАЙ (586): VIJAYapp.sample.ChildLogin$2/onClick :49   -  person Vijay Nag    schedule 14.06.2011


Ответы (2)


Думаю, теперь ваша проблема решена. Я внес некоторые изменения в ваш код, и теперь вызывается onActivityResult (проверьте измененный код: http://www.4shared.com/file/_VR3zi28/CopySampleApptar.html?):

1.-Когда вы вызываете класс активности входа в систему, используйте: getParent().startActivityForResult(myIntent, 1001);

Я не очень хорошо разбираюсь в Android, но я понимаю, что потоком между действиями управляет класс ActivityGroup, поэтому вам следует запускать действия, используя экземпляр ActivityGroup. В предыдущей строке getParent() ссылается на ActivityGroup.

2. Поскольку вы используете экземпляр ActivityGroup, ваш onActivityResult также должен быть помещен в этот класс.

person silver_mx    schedule 15.06.2011
comment
ты не silver_mx ты gold_mx спасибо братан.. :) и +1 - person Mahendran; 02.11.2011
comment
Эта ссылка недоступна, можно ли опубликовать этот код еще раз, у меня такая же проблема. - person Anandhu; 12.02.2014

Подумайте о замене строк

        Intent Ireturn = new Intent();
        setResult(RESULT_OK,Ireturn);

с участием

setResult(RESULT_OK,getIntent());    

getIntent() возвращает действие, которое запустило вход в систему.

person JAL    schedule 14.06.2011
comment
@vijay Рассмотрите возможность публикации ошибки после обновления кода, а также рассмотрите возможность вызова Log.d в onActivityResult. - person JAL; 15.06.2011