My Fragment doesn't call onAttach(context)
method when it launched from AppCompatActivity
.
Fragment creating in XML:
<fragment
android:id="@+id/toolbar"
class="package.MainToolbarFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout="@layout/fragment_main_toolbar" />
But if I extends it from support.v4.Fragment
, onAttach(context)
call !
What could be the problem?
Of course, I can extend all fragments from v4.Fragment
, but I don't want it. Is it bad practice?
Also project min sdk 14.
In addition to the aforementioned comments, I believe it is important to note that if you are attempting to use the
onAttach()
to update data contained inside the fragment from the parent Activity, it is possible to run into issues when the collection variable inside the Activity is null or empty when the fragment is inflated. At some point inside your Activity's life cycle, your data model may change and need to be updated inside the fragment. You might attempt to get a reference to a fragment already inflated, but find as you step through your code thatonAttach()
never fires, even when using the override containing a Context or Activity object.If you are attempting to create a listener for the fragment and initialize the listener from the
onAttach()
callback method,onAttach()
will not fire unless you provide the tag parameter as shown below when adding the fragment to the Activity:It's not called because this method has been added in API 23. If you run your application on a device with API 23 (marshmallow) then
onAttach(Context)
will be called. On all previous Android VersionsonAttach(Activity)
will be called.http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)
Support libraries fragment is platform independent. Hence it works on all API versions.
While Google wants us to stop using deprecated API's
Is so new that it isn't widely called. You need to also implement
For me they are identical but I like to KISS and introducing another support library tends to double my apk to about 1000kb. I only updated my SDK yesterday.
The reason the types are not interchangeable here, as they are in many instances, is that the method taking an
Activity
will still be called when anActivity
is provided as they are both publicly visible andActivity
is more specialised than (as a sub class of)Context
so will take precedence.