CopyPastor

Detecting plagiarism made easy.

Score: 1.6218646168708801; Reported for: String similarity, Exact paragraph match Open both answers

Possible Plagiarism

Plagiarized on 2017-08-01
by Nikunj Paradva

Original Post

Original - Posted on 2016-09-01
by KishuDroid



            
Present in both answers; Present only in the new answer; Present only in the old answer;


**Solution:**
**1) Start Intent in your Fragment by below code:**
/** Pass your fragment reference **/ frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345
**2) Now in your Parent Activity override **`onActivityResult()`** :**
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); }
You have to call this in parent activity to make it work.
**3) In your fragment call:**
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { } }

This is one of the most popular issue. We can found lots of thread regarding this issue. But none of them is useful for ME.
So I have solved this problem using this solution.
**Let's first understand why this is happening.**
***We can call `startActivityForResult` directly from Fragment but actually mechanic behind are all handled by Activity.***
Once you call **`startActivityForResult`** from a Fragment, requestCode will be changed to attach Fragment's identity to the code. That will let Activity be able to track back that who send this request once result is received.
Once Activity was navigated back, the result will be sent to Activity's onActivityResult with the modified requestCode which will be decoded to original requestCode + Fragment's identity. After that, Activity will send the Activity Result to that Fragment through onActivityResult. And it's all done.
**The problem is:**
Activity could send the result to only the Fragment that has been attached directly to Activity but not the nested one. That's the reason why onActivityResult of nested fragment would never been called no matter what.
**Solution:**
**1) Start Intent in your Fragment by below code:**
/** Pass your fragment reference **/ frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345
**2) Now in your Parent Activity override **`onActivityResult()`** :**
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); }
You have to call this in parent activity to make it work.
**3) In your fragment call:**
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { } }
That's it. With this solution, it could be applied for any single fragment whether it is nested or not. And yes, it also covers all the case! Moreover, the codes are also nice and clean.

        
Present in both answers; Present only in the new answer; Present only in the old answer;