Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Fragment onAttach() deprecated

I have updated my app to use the latest support library (version 23.0.0), I've found out that they deprecated the onAttach() function of the Fragment class.

Instead of:

onAttach (Activity activity) 

It's now:

onAttach (Context context) 

As my app uses the activity passed before deprecation, a possible solution i think is:

@Override public void onAttach(Context context) {     super.onAttach(context);     activity = getActivity(); } 

Would that be the correct way to do it?

UPDATE:

If i run a device with API lower than 23, the new onAttach() is not even being called. I hope that this is not what they intended to do!

UPDATE 2:

Issue has been resolved with the latest updates to the SDK.

I have tested on my API 22 device and onAttach(Context) is being called.

Click here to follow the bug report I've opened a couple of weeks ago and the answers from the guys at Google.

like image 390
TareK Khoury Avatar asked Aug 18 '15 21:08

TareK Khoury


People also ask

Is Android fragment deprecated?

This class was deprecated in API level 28. Use the Support Library DialogFragment for consistent behavior across all devices and access to Lifecycle. This class was deprecated in API level 28.

Is onAttach called before onCreate?

In a Fragment's Lifecycle, the onAttach() method is called before the onCreate() method.

How do I pass context from activity to fragment?

Instead of passing around the application context, create a static context inside your Application class and initialize it onCreate(): MyApplication. sContext = getApplicationContext(); then you can access it from any activity/fragment without worrying about detachment. @milaniez: getActivity has always been available.


1 Answers

Activity is a context so if you can simply check the context is an Activity and cast it if necessary.

@Override public void onAttach(Context context) {     super.onAttach(context);      Activity a;      if (context instanceof Activity){         a=(Activity) context;     }  } 

Update: Some are claiming that the new Context override is never called. I have done some tests and cannot find a scenario where this is true and according to the source code, it should never be true. In all cases I tested, both pre and post SDK23, both the Activity and the Context versions of onAttach were called. If you can find a scenario where this is not the case, I would suggest you create a sample project illustrating the issue and report it to the Android team.

Update 2: I only ever use the Android Support Library fragments as bugs get fixed faster there. It seems the above issue where the overrides do not get called correctly only comes to light if you use the framework fragments.

like image 200
Kuffs Avatar answered Sep 21 '22 18:09

Kuffs