2.Fragment
動态加載Fragment也可以實作Tab頁籤點選切換,但是不能實作頁面的滑動,單純比較ViewPager來說,不同頁面的初始化和監聽操作可以在對應的Fragment類内定義,減少了代碼的檢查維護代價。
2.1 主xml布局中添加FrameLayout
<include layout="@layout/market_header"/>
<FrameLayout
android:id="@+id/fl_main"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<include layout="@layout/market_bottom"/>
對應底部Tab頁籤自己設定
2.2 建立對應頁面xml布局代碼
2.3 建立對應布局的Fragment類
public class MainFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View currentView = inflater.inflate(R.layout.fragment_mine,container,false);
//對View的操作
...
return currentView;
}
}
2.4 主Activity中定義對應的Fragment
private Fragment fr_main;
...
2.5 定義Fragment的管理和事務處理對象
FragmentManager fm = getSupportFragmentManager();
FragmentManager fr = getChildFragmentManager();//Fragment嵌套用到,沒有嵌套不需要
FragmentTransaction transaction = fm.beginTransaction();
2.6 隐藏所有的Fragment
//在定義事務處理之後使用
private void hideFragment(FragmentTransaction transaction) {
if(fr_main != null) {
transaction.hide(fr_main);
}
...
}
2.7 定義對應Tab按鍵的點選事件
case R.id.ll_updatings:
if(fr_updatings == null) {
fr_updatings = new UpdatingsFragment();//對應Fragment類建立
transaction.add(R.id.fl_main, fr_updatings);//添加到事務中
} else {
transaction.show(fr_updatings);//
}
//Tab的點選效果
...
break;
...
2.8 在所有點選事件代碼後面執行事件的送出
2.9 在onCreate中定義預設顯示的Fragment