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 在所有点击事件代码后面执行事件的提交
transaction.commit();