本文为菜鸟窝作者蒋志碧的连载。“从 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
网友评论