6

I try to get the result in a fragment. Code in fragment

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 ->
     //
    }
}

This code is called. But also method onActivityResult in DrawerActivity

Do that onActivityResult is called only in the fragment?

UPDATE

This code in DrawerActivity

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

For some reason, it is also satisfied, but only after onActivityResult in fragment.

prashant17
  • 1,520
  • 3
  • 14
  • 23
user1854307
  • 580
  • 4
  • 8
  • 21

4 Answers4

5

in your Activity call this

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

Then call in fragment

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

 }
Syed Danish Haider
  • 1,334
  • 11
  • 15
  • 1
    It worked for me correctly! I used this in kotlin. Source code was like this: override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) for (fragment in supportFragmentManager.fragments) { fragment.onActivityResult(requestCode, resultCode, data) } } – quaide Feb 25 '20 at 12:34
  • 1
    This is working for me – Parth Patel Dec 06 '21 at 11:33
2

add code in Drawer activity

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

}

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

Then your onActivityResult method of fragment called

Hemant Parmar
  • 3,924
  • 7
  • 25
  • 49
Chirag Nahar
  • 159
  • 8
0

Everything seems good in the code. Have you checked with the debugger because I have implemented the same in my fragment and it's working fine

 @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;
            }
        }
    }
Sunny
  • 3,134
  • 1
  • 17
  • 31
0

onActivityResult in fragment is called only after such method in activity. If you want handle result only on activity or only in fragment - maybe it will be better to use different result codes for different situation (if I understand your problem correctly)