dozyx / MyPractice

曾经渴望别人告诉我什么是 best practice,现在终于明白 practice is best.
5 stars 1 forks source link

Fragment 问题记录 #17

Open dozyx opened 6 years ago

dozyx commented 6 years ago

问题:onAttach 没有回调,导致使用 context 时出现空指针异常 原因:onAttach 有两个重载 onAttach(Activity) 和 onAttach(Context),其中后者是在 API 23 中增加的,这次出现问题正是因为在 API 22 的机器上重写的是 onAttach(Context)。 解决方法:如果使用的是 Support 库的 Fragment 应该是不会有问题的,除此之外,也可以将 onAttach 改为

/*
 * onAttach(Context) is not called on pre API 23 versions of Android and onAttach(Activity) is deprecated
 * Use onAttachToContext instead
 */
@TargetApi(23)
@Override
public final void onAttach(Context context) {
    super.onAttach(context);
    onAttachToContext(context);
}

/*
 * Deprecated on API 23
 * Use onAttachToContext instead
 */
@SuppressWarnings("deprecation")
@Override
public final void onAttach(Activity activity) {
    super.onAttach(activity);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        onAttachToContext(activity);
    }
}

/*
 * Called when the fragment attaches to the context
 */
protected void onAttachToContext(Context context) {
}

参考:
Android - onAttach(Context) not called for API 23