Fragment 通过show和hide 切换界面

Fragment 通过show和hide 切换界面

开发项目过程中我们有很多需要Fragment 碎片化来实现多个页面的替换,像微信一样通过点击底部菜单实现界面切换具体该如何实现呢代码如下:

工具类

public class ViewUtils {
public static BaseFragment createFragment(Class<?> clazz) {
        BaseFragment resultFragment = null;
        String className = clazz.getName();
        try {
            try {
                resultFragment = (BaseFragment) Class.forName(className).newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return resultFragment;
    }
}

逻辑代码

 private Fragment mCurrentFragment=null;
 FragmentManager mFragmentManager = getSupportFragmentManager();//初始化fragmentManager
     private void switchFragment(int index) {
        Fragment to = mFragmentManager.findFragmentByTag(index+"");
        if (to == null) {
            if (index == 0)
                to = ViewUtils.createFragment(homefragment.class);
            else if (index == 1)
                to = ViewUtils.createFragment(bookfragment.class);
            else if (index == 2)
                to = ViewUtils.createFragment(tongzhifragment.class);
            else if(index == 3)
            to = ViewUtils.createFragment(mefragment.class);
        }

       if (to.isAdded()) {
            mFragmentManager.beginTransaction().hide(mCurrentFragment).show(to).commit();
        } else {
        if (mCurrentFragment != null)
                mFragmentManager.beginTransaction().hide(mCurrentFragment).add(R.id.f_content, to, index + "").commit();
            else
                mFragmentManager.beginTransaction().add(R.id.f_content, to, index + "").commit();
        }
        mCurrentFragment = to;
    }
//调用方法 switchFragment(0);

第一次进入界面时点击第1个fragment 未被依附added mCurrentFragment 也是null 所以先添加提交
mFragmentManager.beginTransaction().add(R.id.f_content, to, index + “”).commit();
点击第二个界面的时候第2个fragment也未被added 但mCurrentFragment 已不为null被赋值第1个fragment所以 mFragmentManager.beginTransaction().hide(mCurrentFragment).add(R.id.f_content, to, index + “”).commit();
当从第二个界面跳转到第一个界面时 第二个界面(也就是当前界面已经依附在了Activity 中)所以
if (to.isAdded()) {
mFragmentManager.beginTransaction().hide(mCurrentFragment).show(to).commit();}

代码如下:http://download.csdn.net/download/bxllove/10159712
这里写图片描述这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值