强制开发人员实现片段回调

时间:2016-12-19 03:04:06

标签: android android-fragments callback

嗨我有一个问题,我的同事经常忘记对我广泛使用的通用互联网错误片段实施回调。我有一个问题,我们只发现一个类在我们唤起片段时遗漏了它。 I.E.应用程序神秘地崩溃,我们浪费时间查找原因。

如果没有实施custom lint for android,我如何强迫开发人员实施回调?这是一个简单的片段,只显示文本而不带参数。

 @Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        mNoInternetCallbackInterface = (NoInternetCallbackInterface) getActivity();
    } catch (ClassCastException e) {
        throw new ClassCastException(getActivity().toString()
                + " must implement OnFragmentInteractionListener");
    }
}



@Override
public void onStart(){
    super.onStart();
    try {
        mNoInternetCallbackInterface = (NoInternetCallbackInterface) getActivity();
    } catch (ClassCastException e) {
        throw new ClassCastException(getActivity().toString()
                + " must implement OnFragmentInteractionListener");
    }
}

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

在活动中引用。 (是的,我知道我应该使用创建实例函数,但不会解决此问题)

        @Override
        public void onError(final Throwable e) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            NoInternetDialogFragment mNoInternetDialogFragment = new NoInternetDialogFragment();
            try {
                mNoInternetDialogFragment.show(fragmentManager, "no_internet");
            } catch (IllegalStateException ie) {
                // ignore as this code is going away.
            }

        }

1 个答案:

答案 0 :(得分:3)

您可以在父片段中放置任何必要的内容,并使其他片段扩展父片段。我们可以添加抽象方法来强制用户实现它。

abstract public class ParentFragment extends Fragment {
    //put anything needs to be inherited in this class

    public void onError(final Throwable e) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        NoInternetDialogFragment noInternetDialogFragment = new NoInternetDialogFragment();
        try {
            mNoInternetDialogFragment.show(fragmentManager, "no_internet");
            onErrorHandle(fragmentManager, noInternetDialogFragment);
        } catch (IllegalStateException ie) {
            // ignore as this code is going away.
        }

    }
    abstract protect void onErrorHandle(FragmentManager e, NoInternetDialogFragment fragment);
}

这是儿童片段:

public class ChildFragment extends ParentFragment {

     void onErrorHandle(FragmentManager e, NoInternetDialogFragment fragment) {//your code}
}

所以它的ParentFragment将处理这个案例。