如何在没有onAttach(Context context)的情况下初始化OnFragmentInteractionLi



我正在尝试让我的应用程序(使用 com.firebase.ui 和 com.firebase.ui.auth(在旧的 API 级别 15 (4.0.4( 设备上工作。 首先,我使用清单标签:

 <uses-sdk tools:overrideLibrary="com.firebase.ui, com.firebase.ui.auth"/> 

但后来我发现在旧设备上没有调用onAttach(Context...(方法。
所以我读了一些关于它的文章,这是我根据我读到的内容想出来的:

  @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        Log.d(TAG, "onAttach Activity 1A "  );
        super.onAttach(activity);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            setmListener(activity );
        }
    }
    private void setmListener(Context context){
        Log.d(TAG, "setmListener 1  "  );
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }
    @Override
    public void onAttach(Context context) {
        Log.d(TAG, "onAttach Context 1 "  );
        super.onAttach(context);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            setmListener(context);
        }
    }

当代码在旧的 api 15 设备上运行时,onAttach(Context context( 方法不会只调用 onAttach(Activity activity( 方法(与运行棒棒糖的模拟器相同(。

 D/StSt_MaxWListFrag: onAttach Activity 1A 
 D/StSt_MaxWListFrag: setmListener 1  

但是在具有 M 的设备上,两种方法都运行,但 setmListener 只按预期被调用一次:

D/StSt_MaxWListFrag: onAttach Context 1 
D/StSt_MaxWListFrag: onAttach Activity 1A 
D/StSt_MaxWListFrag: setmListener 1  

所以 - 到目前为止它似乎正在工作,到目前为止没有问题。 我只是想知道我在这里是否缺少一些东西 - 这种方法是否会让我头疼,还是不好的做法 - 也许效率低下?感谢您的任何见解!

正如您在文档中看到的那样,从 API 23 开始,onAttach(Activity) 已弃用,而是使用 onAttach(Context)onAttach(Activity)不会自动调用新onAttach(Context)

因此,为了支持所有版本的 API 并仅执行一次附加操作,您必须将函数中的附加逻辑分开,并从执行检查的两个回调中调用该函数:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    attached();
}
@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        attached();
    }
}

相关内容

  • 没有找到相关文章

最新更新