I\'ve updated the SDK to the latest version (API 23) and the onAttach(Activity)
method for fragment is deprecated. So instead of using that method, now I\'m usi
I came up with the same issue. I have a minSdkVersion of 19 and a targetSdkVersion of 23 and I am using fragmentManager in an AppCompatActivity.
onAttach(Activity activity)
is marked as deprecated but I ran into app crashes when I replaced it with onAttach(Context context)
.
So instead, I now have both versions present and when I run my app on API22, onAttach(Activity activity)
is fired, even though it is marked as deprecated.
I have not tested it on an Android Marshmallow device, but my understanding is that it would run the onAttach(Context context)
version, ignoring the other one.
Update to take into account @skaar's observation in the comments below: I could now test on API23 and can confirm that running on platform 23 causes both methods (with Activity and Context) to be called. Thanks for the heads up!
You should try using the Support library version of Fragment.
You need to switch to import android.support.v4.app.Fragment;
instead of import android.app.Fragment;
. You'll also need to make sure you're using getSupportFragmentManager()
instead of getFragmentManager()
.
I have encountered the same problem. What I have done to resolve it:
Change the argument type of onAttach callback from Activity to Context. For unknown reason, this modification results in the fact that the method onAttach(Context) is not called anymore during the fragment lifecycle. As a consequence, my app was crashing since the code that was in onAttach method has never been executed.
Move the code that was in onAttach method to onCreate one since it gets still executed.
With this modification, the app turns to functionate as before. No additional import
statements were required.
After I read your answer @David Rauca
I think the second one can solve my problem. But when I look into the source code. I found that actually, onAttach(Context context)
do nothing on Android M, just called the old method.
As a solution:
@SuppressWarnings("deprecation")
Just add it into the old method is the best solution.
@Override
public void onAttach(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
super.onAttach(context);
onAttachToContext(context);
} else {
Activity activity = getActivity();
super.onAttach(activity);
onAttachToContext(activity);
}
}
pleas post about this BUG here
ISSUE OPPENED ON GOOGLE AOSP PROJECT HOMESITE:
https://code.google.com/p/android/issues/detail?id=185465
ps. this is not your job to search for solution to this problem & to find any kind of workarounds .. but to force google to fix its broken API! to do this u need to complain as i said.
related issue - getContext() from fragment:
https://code.google.com/p/android/issues/detail?id=185848