最火開源框架MVVMhabit
一. 準(zhǔn)備工作
二. 快速上手
三. 數(shù)據(jù)綁定
四. 其他
1聚至、引用庫
//底部tabBar
implementation('me.majiajie:pager-bottom-tab-strip:2.2.5') {
exclude group: 'com.android.support'
}
2酷勺、xml 設(shè)置標(biāo)簽 me.majiajie.pagerbottomtabstrip.PageBottomTabLayout
fragment也要用到FrameLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<!--fragment-->
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#F0F0F0" />
<!--tabBar-->
<me.majiajie.pagerbottomtabstrip.PageBottomTabLayout
android:id="@+id/pager_bottom_tab"
android:layout_width="match_parent"
android:layout_height="56dp"
app:elevation="8dp" />
</LinearLayout>
3、activity 初始化framgent相關(guān)代碼扳躬,在onCreate中調(diào)用initData就行了
四個Fragment頁面這里就不詳細(xì)寫了脆诉,創(chuàng)建類繼承Fragment就行了
//其他代碼...
private List<Fragment> mFragments;
private List<Fragment> mFragmentDatas;
//fragment切換是否刷新
private Boolean isCheck = true;
//初始化方法
public void initData() {
initFragment();
initBottomTab();
}
private void initFragment() {
mFragmentDatas = new ArrayList<>();
mFragmentDatas.add(new TabBar1Fragment());
mFragmentDatas.add(new TabBar2Fragment());
mFragmentDatas.add(new TabBar3Fragment());
mFragmentDatas.add(new TabBar4Fragment());
mFragments = new ArrayList<>();
for (int i = 0; i < mFragmentDatas.size(); i++) {
mFragments.add(null);
}
//默認(rèn)選中第一個
addFragment(0);
}
private void initBottomTab() {
//初始化tabBar控件
NavigationController navigationController = binding.pagerBottomTab.material()
.addItem(R.mipmap.yingyong, "應(yīng)用")
.addItem(R.mipmap.huanzhe, "工作")
.addItem(R.mipmap.xiaoxi_select, "消息")
.addItem(R.mipmap.wode_select, "我的")
.setDefaultColor(ContextCompat.getColor(this, R.color.black))
.setMessageNumberColor(ContextCompat.getColor(this, R.color.blue))
.setMessageBackgroundColor(ContextCompat.getColor(this, R.color.green))
.build();
//底部按鈕的點(diǎn)擊事件監(jiān)聽
navigationController.addTabItemSelectedListener(new OnTabItemSelectedListener() {
@Override
public void onSelected(int index, int old) {
addFragment(index);
}
@Override
public void onRepeat(int index) {
}
});
}
private void addFragment(int index) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
//兩種fragment加載方式甚亭,replace每次都初始化fragment;add只有第一次初始化
if (isCheck) {
mFragments.set(index, mFragmentDatas.get(index));
transaction.replace(R.id.frameLayout, mFragments.get(index));
} else {
if (mFragments.get(index) == null) {
mFragments.set(index, mFragmentDatas.get(index));
transaction.add(R.id.frameLayout, mFragments.get(index));
}
hideFragment(transaction);
transaction.show(mFragments.get(index));
}
transaction.commitAllowingStateLoss();
}
//隱藏所有的fragment
private void hideFragment(FragmentTransaction transaction) {
for (int i = 0; i < mFragmentDatas.size(); i++) {
if (mFragments.get(i) != null) {
transaction.hide(mFragments.get(i));
}
}
}
//其他代碼...