本文為菜鳥窩作者蔣志碧的連載?!皬?0 開始開發(fā)一款直播 APP ”系列來聊聊時下最火的直播 APP,如何完整的實現(xiàn)一個類"騰訊直播"的商業(yè)化項目
【從 0 開始開發(fā)一款直播 APP】2.1 高層封裝之 Fragment
【從 0 開始開發(fā)一款直播 APP】2.2 高層封裝之 Fragment-- 滑動導航
Fragment 封裝
和 Activity 封裝類似,方法主要有:初始化界面、返回操作,數(shù)據(jù)初始化、事件監(jiān)聽、ActionBar、獲取布局、獲取控件,數(shù)據(jù)傳遞等
創(chuàng)建 BaseFragment 類,將其改為抽象類,并繼承 Fragment,實現(xiàn) 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(){}
數(shù)據(jù)初始化
protected abstract void initData();
事件監(jiān)聽
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);
}
數(shù)據(jù)傳遞
protected Intent mBundleIntent;
public void setBundleIntent(Intent bundleIntent) {
mBundleIntent = bundleIntent;
}
其它 Fragment 回調(diào)方法
@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();
}
方法調(diào)用 (注意方法調(diào)用順序)
@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){}
/**
* 數(shù)據(jù)傳遞
* @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(){}
/**
* 初始化數(shù)據(jù)
*/
protected abstract void initData();
/**
* 設(shè)置監(jiān)聽
*/
protected abstract void setListener();
/**
* 初始化界面
* @param rootView
*/
protected abstract void initView(View rootView);
/**
* 獲取布局
* @return
*/
protected abstract int getLayoutId();
}
Fragment 封裝完畢,請繼續(xù)保持好奇的心,關(guān)注我為您推送的博文。
下一章講解 Fragment 封裝之后的使用,暫且寫個小 Demo 吧。
更多內(nèi)容,請關(guān)注菜鳥窩(微信公眾號ID: cniao5),程序猿的在線學習平臺。 歡迎勾搭小助手(lov730)加入高端技術(shù)交流群*。轉(zhuǎn)載請注明出處,本文出自菜鳥窩,原文鏈接http://www.cniao5.com/forum/thread/334c57740efe11e797e200163e0230fa