【从 0 开始开发一款直播 APP】2.1 高层封装之 Fragment

本文为菜鸟窝作者蒋志碧的连载。“从 0 开始开发一款直播 APP ”系列来聊聊时下最火的直播 APP,如何完整的实现一个类"腾讯直播"的商业化项目


【从 0 开始开发一款直播 APP】2.1 高层封装之 Fragment
【从 0 开始开发一款直播 APP】2.2 高层封装之 Fragment-- 滑动导航


Fragment 封装

和 Activity 封装类似,方法主要有:初始化界面、返回操作,数据初始化、事件监听、ActionBar、获取布局、获取控件,数据传递等

创建 BaseFragment 类,将其改为抽象类,并继承 Fragment,实现 onCreate() 方法以及 onCreateView() 方法

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return super.onCreateView(inflater, container, savedInstanceState);
}

初始化界面

protected abstract void initView(View rootView);

返回操作

public void onBackPressed(){}

数据初始化

 protected abstract void initData();

事件监听

protected abstract void setListener();

重写ActionBar

public void initActionBar(Activity activity){}

获取布局

protected abstract int getLayoutId();

获取控件

public T obtainView(int resId){
    return (T) mRootView.findViewById(resId);
}

数据传递

protected Intent mBundleIntent;
public void setBundleIntent(Intent bundleIntent) {
    mBundleIntent = bundleIntent;
}

其它 Fragment 回调方法

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public void onHiddenChanged(boolean hidden) {
    if (hidden){
        mBundleIntent = null;
    }
    super.onHiddenChanged(hidden);
}

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
}

@Override
public void onPause() {
    super.onPause();
}

方法调用 (注意方法调用顺序)

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    if (getLayoutId() != 0){
        mRootView = inflater.inflate(getLayoutId(),container,false);
    }
    initView(mRootView);
    setUserVisibleHint(true);
    setListener();
    initData();

    return mRootView;
}

代码合并下,看看整体效果

public abstract class BaseFragment extends Fragment {

    protected View mRootView;
    protected Intent mBundleIntent;
    
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


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

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        if (getLayoutId() != 0){
            mRootView = inflater.inflate(getLayoutId(),container,false);
        }
        initView(mRootView);
        setUserVisibleHint(true);
        setListener();
        initData();

        return mRootView;
    }

    @Override
    public void onHiddenChanged(boolean hidden) {
        if (hidden){
            mBundleIntent = null;
        }
        super.onHiddenChanged(hidden);
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
    }

    /**
     * 重写ActionBar
     * @param activity
     */
    public void initActionBar(Activity activity){}

    /**
     * 数据传递
     * @param bundleIntent
     */
    public void setBundleIntent(Intent bundleIntent) {
        mBundleIntent = bundleIntent;
    }

    /**
     * 获取控件
     * @param resId
     */
    public T obtainView(int resId){
        return (T) mRootView.findViewById(resId);
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    /**
     * 返回操作
     */
    public void onBackPressed(){}

    /**
     * 初始化数据
     */
    protected abstract void initData();

    /**
     * 设置监听
     */
    protected abstract void setListener();

    /**
     * 初始化界面
     * @param rootView
     */
    protected abstract void initView(View rootView);

    /**
     * 获取布局
     * @return
     */
    protected abstract int getLayoutId();

}

Fragment 封装完毕,请继续保持好奇的心,关注我为您推送的博文。

下一章讲解 Fragment 封装之后的使用,暂且写个小 Demo 吧。

更多内容,请关注菜鸟窝(微信公众号ID: cniao5),程序猿的在线学习平台。 欢迎勾搭小助手(lov730)加入高端技术交流群*。转载请注明出处,本文出自菜鸟窝,原文链接http://www.cniao5.com/forum/thread/334c57740efe11e797e200163e0230fa

你可能感兴趣的:(【从 0 开始开发一款直播 APP】2.1 高层封装之 Fragment)