Android onActivityResult во фрагменте

Я пытаюсь получить результат во фрагменте. Код во фрагменте

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode != Activity.RESULT_OK) return

    val bundle = data?.extras
    when (requestCode) {
        LicenseActivationActivity.REQUEST_RESULT_COUNT_ENTERPRISE ->
     //
    }
}

Этот код называется. Но также метод onActivityResult в DrawerActivity

Неужели onActivityResult вызывается только во фрагменте?

ОБНОВЛЕНИЕ

Этот код в DrawerActivity

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK) {
        WayBillsActivity.start(this)
        finish()
    }
}

Почему-то тоже выполняется, но только после onActivityResult во фрагменте.


person user1854307    schedule 16.08.2018    source источник
comment
Возможный дубликат onActivityResult не вызывается во фрагменте   -  person shkschneider    schedule 16.08.2018
comment
сначала он всегда вызывает активность onActivityResult, и из этого вам нужно вызвать фрагмент onActivityResult   -  person Shweta Chauhan    schedule 16.08.2018
comment
удалить super из метода.   -  person Hemant Parmar    schedule 16.08.2018
comment
Да. Я не понимаю, откуда это событие. Значение requestCode в DrawerActivity нигде в приложении не используется.   -  person user1854307    schedule 16.08.2018


Ответы (4)


в вашей деятельности вызовите это

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

Затем вызовите фрагмент

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  //super.onActivityResult(requestCode, resultCode, data); comment this unless you 

 }
person Syed Danish Haider    schedule 16.08.2018
comment
У меня сработало правильно! Я использовал это в котлине. Исходный код был таким: override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) for (fragment in supportFragmentManager.fragments) { fragment.onActivityResult(requestCode, resultCode , данные) } } - person leeyang; 25.02.2020

добавить код в действие Drawer

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
   fragment.super.onActivityResult(requestCode, resultCode, data)

}

   **fragment.super.onActivityResult(requestCode, resultCode, data)**

Затем ваш onActivityResult метод фрагмента называется

person Chirag Nahar    schedule 16.08.2018

В коде вроде все хорошо. Вы проверили с помощью отладчика, потому что я реализовал то же самое в своем фрагменте, и он работает нормально

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQ_CODE_EDIT_PROFILE:
                    userModel = data.getExtras().getParcelable(UserModel.class.getSimpleName());
                    setData();
                    break;
            }
        }
    }
person Sunny    schedule 16.08.2018

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

person Constantin Chernishov    schedule 16.08.2018