强制开发者实现一个片段回调函数

3

你好,我遇到了一个问题,我的同事们经常忘记在我的通用互联网错误片段中实现回调。我们只有在调用片段时才会发现缺少类的问题。也就是说,应用程序会神秘地崩溃,我们要花时间查找原因。

除了实现Android的自定义lint检查,我如何强制开发人员实现回调?这是一个简单的片段,仅显示文本并不带参数。

 @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个回答

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处理。

1
@StarWind 我编辑了答案,请告诉我这是否符合您的需求。 - Huaying
我认为这里的混淆在于你回答了关于继承的问题。我正在使用一个Activity来调用它,所以我们不能只是继承/覆盖。 - StarWind0
将父类设为抽象(abstract),并添加一个抽象的受保护方法(protect method)以强制用户实现它。 - Cenxui
@StarWind 我认为新版本的答案是你想要的。 - Cenxui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接