您的位置:首页 > 其它

使用Fragment实现底部菜单栏

2015-12-03 20:51 417 查看
注明:本文代码已用了郭霖大神的博客,我鞋这篇博客也是为了提醒我自己当时这里自己不懂

实现底部菜单栏的方式比较多,具体的有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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: