美文网首页Android知识库android开发实战专题计算机杂谈
【从 0 开始开发一款直播 APP】2.1 高层封装之 Frag

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

作者: 菜鸟窝 | 来源:发表于2017-03-29 10:49 被阅读251次

    本文为菜鸟窝作者蒋志碧的连载。“从 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 extends View> 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 extends View> 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 高层封装之 Frag

        本文链接:https://www.haomeiwen.com/subject/dpdeottx.html