onAttach() not called in Fragment

winston picture winston · Sep 16, 2015 · Viewed 23k times · Source

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.

Answer

sockeqwe picture sockeqwe · Sep 20, 2015

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 Versions onAttach(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.