基本的框架搭建
/**
* ****************************************************************
* bottomBar (tabbar) *
* ****************************************************************
* Home(tapLayout) * find * message * me *
* ****************************************************************
* follow * Recommend * * * *
* ****************************************************************
* */
1.首先App如果有tabbar可以選擇 BottomBarLayout ,這個tabbar可以實現滿足基本的tabbar的使用范疇。使用方法可以參考github鏈接地址。
2.現在的App一般都是采用的沉浸式狀態欄 ,我這里采用的是ImmersionBar,這個框架非常的好用,使用方法可以參考github連接地址。
- tabbar上面有四個模塊 : home 、 find、 messge、 me ,這里我們可以把四個模塊看做成四個fragment,那么,我們不能直接寫四個fragment上面去,因為在開發的過程中會發現出現很多意想不到的問題,所以我們必須寫一個BaseFragment ,這個fragment是,下面介紹一下這個BaseFrament怎么寫:
/**
* 通過懶加載的形式去加載頁面 大大的提升了App的性能
* */
public abstract class BaseFragment extends Fragment {
private KProgressHUD kProgressHUD;
public SGSharedPrefUtils sgSharedPrefUtils;
public View view;
public Activity mContext;
/**
* 是否初始化過布局
*/
protected boolean isViewInitiated;
/**
* 當前界面是否可見
*/
protected boolean isVisibleToUser;
/**
* 是否加載過數據
*/
protected boolean isDataInitiated;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(getLayoutId(), container, false);
ButterKnife.bind(this, view);
mContext = getActivity();
sgSharedPrefUtils = SGSharedPrefUtils.getInstance(mContext);
this.initData();
}
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated=true;
//加載數據
prepareFetchData();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
if (isVisibleToUser) {
prepareFetchData();
}
}
public void prepareFetchData() {
prepareFetchData(false);
}
/**
* 判斷懶加載條件
*
* @param forceUpdate 強制更新,好像沒什么用?
*/
public void prepareFetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
loadData();
isDataInitiated = true;
}
}
/**
* 懶加載
*/
protected abstract void loadData();
/**
* 獲取布局ID
*
* @return
*/
protected abstract int getLayoutId();
/**
* 數據初始化操作
*/
protected abstract void initData();
@Override
public void onDestroy() {
super.onDestroy();
this.view = null;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.bind(getActivity()).unbind();
}
/**
* [頁面跳轉]
*
* @param clz
*/
public void startActivity(Class<?> clz) {
startActivity(clz, null);
}
/**
* [攜帶數據的頁面跳轉]
*
* @param clz
* @param bundle
*/
public void startActivity(Class<?> clz, Bundle bundle) {
Intent intent = new Intent();
intent.setClass(getActivity(), clz);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}
/**
* [含有Bundle通過Class打開編輯界面]
*
* @param cls
* @param bundle
* @param requestCode
*/
public void startActivityForResult(Class<?> cls, Bundle bundle,
int requestCode) {
Intent intent = new Intent();
intent.setClass(getActivity(), cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivityForResult(intent, requestCode);
}
public void showToast(String text) {
Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
}
}
4.上面的BaseFragment 我們可以直接的集成到你的App里面去使用了,非常好用 ,它是用過懶加載的形式把界面上面的gragment加載出來,集成BaseFragment后 我們直接在fragment里面實現下面的三個方法就行了:
/**
* 懶加載
*/
protected abstract void loadData();
/**
* 獲取布局ID
*
* @return
*/
protected abstract int getLayoutId();
/**
* 數據初始化操作
*/
protected abstract void initData();
5.BaseFragment里面使用一個大家常用的庫 :butterknife ,使用方法可以查看鏈接地址
6.現在可以把所有的fragment都繼承BaseFragment 了 ,然后在loadData方法里面實現網絡請求 ,和設置該fragment
7.四個fragment寫好后就可以放在tabbarActivity里面了 ,這樣我們的tabbar界面基本上就搭建完成了