片段onAttach()方法使我的代码崩溃

时间:2017-03-08 13:10:32

标签: android fragment

这个onAttach方法崩溃我的android应用程序,我想知道这个方法的相关性以及如果我完全删除该方法会发生什么

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

我将其删除,我的代码运行顺利,希望将来不会出现任何问题。

2 个答案:

答案 0 :(得分:1)

以下是问题context instanceof OnFragmentInteractionListener

Fragment comunication Android docs.

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }

答案 1 :(得分:0)

当在两者之间需要通信时,此代码是用于处理活动中的片段的documentation's way。我提到它是文档的方式,因为它不是唯一的方法(您可以使用其他技术,例如发布/订阅引擎,例如EventBus)。

如果片段附加到的活动没有实现片段期望附加到的接口,则此代码故意抛出RunTimeException。如果它确实实现了 - 活动将保存为该接口类型的指针(在您的情况下为OnFragmentInteractionListener)。

您可以看到抛出异常的行:

throw new RuntimeException(context.toString()
            + " must implement OnFragmentInteractionListener");

所以,如果你有在控制台"必须实现OnFragmentInteractionListener" - 你知道片段附加到应该实现OnFragmentInteractionListener的活动但是没有。