'Android onActivityResult in fragment
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.
Solution 1:[1]
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
}
Solution 2:[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
Solution 3:[3]
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;
}
}
}
Solution 4:[4]
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)
Solution 5:[5]
Kotlin You do this
class MyClass(mActivity: Context, mFragment: Fragment) {
private val myActivity = mActivity
private val myFragment = mFragment
val intent = Intent(myActivity, CalcActivity::class.java)
intent.putExtra("id", id)
intent.putExtra("data", data)
// the result from the activity will be sent to the myFragment not myActivity
myFragment.startActivityForResult(intent, 123)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Syed Danish Haider |
| Solution 2 | Hemant Parmar |
| Solution 3 | Sunny |
| Solution 4 | Constantin Chernishov |
| Solution 5 | Hamza Saidani |
