使用Fragment实现底部菜单栏

注明:本文代码已用了郭霖大神的博客,我鞋这篇博客也是为了提醒我自己当时这里自己不懂


实现底部菜单栏的方式比较多,具体的有RadioGroup+Fragment、FragmentTabHost+Fragment、Tabs等方式。基本的原理就是使用一个ViewGroup装载Fragment,在底部使用布局装载几个按钮来对Fragment进行定位就可以了。

如果这么简单的话我就不会在写这个博客了,这里涉及到了Activity绑定Fragment的方式。

FragmentTransaction transaction = getFragmentManager().beginTransaction();使用FragmentTransaction来向Activity装载Fragment,


我们必须要用到的是add()、hide()、show()这三个方法。

1、当我们点击底部每一项的时候,判断当前对应的Fragment是否为空,如果为空就创建新的实例,调用add()方法,在此之前要隐藏之前所有的Fragment,及hide()方法。

具体代码为:

/**
* 根据传入的index参数来设置选中的tab页。

* @param index
*            每个tab页对应的下标。0表示消息,1表示联系人,2表示动态,3表示设置。
*/
private void setTabSelection(int index) {
FragmentTransaction transaction = fm.beginTransaction();
hideFragments(transaction);
switch (index) {
case 0:
if (fragment_home == null) {
// 如果MessageFragment为空,则创建一个并添加到界面上
fragment_home = new HomeFragment();
transaction.add(R.id.frame_container, fragment_home);
} else {
// 如果MessageFragment不为空,则直接将它显示出来
transaction.show(fragment_home);
}
break;
case 1:
if (fragment_category == null) {
// 如果MessageFragment为空,则创建一个并添加到界面上
fragment_category = new CategoryFragment2();
transaction.add(R.id.frame_container, fragment_category);
} else {
// 如果MessageFragment不为空,则直接将它显示出来
transaction.show(fragment_category);
}
break;
case 2:
if (fragment_brand == null) {
// 如果MessageFragment为空,则创建一个并添加到界面上
fragment_brand = new BrandFragment();
transaction.add(R.id.frame_container, fragment_brand);
} else {
// 如果MessageFragment不为空,则直接将它显示出来
transaction.show(fragment_brand);
}
break;
case 3:
if (fragment_integral == null) {
// 如果MessageFragment为空,则创建一个并添加到界面上
fragment_integral = new IntegralFragment();
transaction.add(R.id.frame_container, fragment_integral);
} else {
// 如果MessageFragment不为空,则直接将它显示出来
transaction.show(fragment_integral);
}
break;
case 4:
if (fragment_user == null) {
// 如果MessageFragment为空,则创建一个并添加到界面上
fragment_user = new UserFragment();
transaction.add(R.id.frame_container, fragment_user);
} else {
// 如果MessageFragment不为空,则直接将它显示出来
transaction.show(fragment_user);
}
break;


default:
break;
}
transaction.commit();
}

你可能感兴趣的:(Fragment)