onAttach(活动)去precated:我在哪里可以检查活动实现回调接口我在、回调、接口、onAttach

2023-09-05 02:07:21 作者:醉酒七分

23 API之前,我用碎片的onAttach方法来让我的听众实例,则引用内部onDetach清洗。例如:

Before API 23 I used Fragment's onAttach methods to get my listener instance, then the reference is cleaned inside onDetach. ex:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mListener = null;
    try {
        mListener = (SellFragmentListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement SellFragmentListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

它是安全的做onAttach(上下文的背景下)内相同的检查,或是否有更好的方式来获得持有人的活动实例?

Is it safe to do the same check inside onAttach(Context context) or is there a better way to get the holder activity instance?

推荐答案

检查源$ C ​​$ C:

Check the source code:

/**
 * Called when a fragment is first attached to its context.
 * {@link #onCreate(Bundle)} will be called after this.
 */
public void onAttach(Context context) {
    mCalled = true;
    final Activity hostActivity = mHost == null ? null : mHost.getActivity();
    if (hostActivity != null) {
        mCalled = false;
        onAttach(hostActivity);
    }
}

/**
 * @deprecated Use {@link #onAttach(Context)} instead.
 */
@Deprecated
public void onAttach(Activity activity) {
    mCalled = true;
}

因此​​, onAttach(活动活动)被称为由 onAttach(上下文的背景下),如果有一台主机活动。您可以使用 onAttach(活动活动)安全。

So the onAttach(Activity activity) is called by the onAttach(Context context) if there is a host activity. You can use the onAttach(Activity activity) safely.