Android之切换Fragment只加载一次

Fragment是我们Android开发中非常常用的一个类,很多时候我们需要做几个页面在一个activity中,点击不同的button来进行切换,但是如果不像微信那样滑动的话,要像qq那样子点击才能切换,这时候我们避免点击切换不同的Fragment而重新走onCreateView,因为那样不仅影响我们的效率,还浪费用户的流量,我们得做一些处理,好像也叫做懒加载。废话不多说,上代码要紧

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.main_home_layout:
                if (currentFragment!=mHomeFragment){
                    //将所有图片和字体颜色还原
                    reset();
                    replaceFragment(newHomeFragment());
                    currentFragment=newHomeFragment();
                    //再设置选中图片和选中的字体颜色
                    mHomeImage.setImageResource(R.mipmap.ic_main_home_p);               mHomeText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
                }

                break;
            case R.id.main_home_server:
                if (currentFragment!=mServerFragment){
                    reset();
                    replaceFragment(newServerFragment());
                    currentFragment=newServerFragment();
                    mServerImage.setImageResource(R.mipmap.ic_main_server_p);                   
                    mServerText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
                }

            case R.id.main_home_fanli:
                reset();
                replaceFragment(newFanliFragment());
                currentFragment=newFanliFragment();
                          mFanliText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
                break;

            case R.id.main_home_message:
                if (currentFragment!=mMessageFragment){
                    reset();
                    replaceFragment(newMessageFragment());
                    currentFragment=newMessageFragment();

                    mMessageImage.setImageResource(R.mipmap.ic_main_message_p);
                    mMessageText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
                }
                break;

            case R.id.main_home_mine:
                if (currentFragment!=mMineFragment) {
                    reset();
                    replaceFragment(newMineFragment());
                    currentFragment = newMineFragment();

                    mMineImage.setImageResource(R.mipmap.ic_main_mine_p);
                    mMineText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
                }
                break;

            case R.id.main_download:
                startActivity(new Intent(this,DownloadActivity.class));
                break;
        }
    }

    /**
     * 重置各个item
     */
    private void reset() {
        mMineImage.setImageResource(R.mipmap.ic_main_mine);
        mMessageImage.setImageResource(R.mipmap.ic_main_message);
        mServerImage.setImageResource(R.mipmap.ic_main_server);
        mHomeImage.setImageResource(R.mipmap.ic_main_home);
                    mMineText.setTextColor(getResources().getColor(R.color.main_item_text_color));
                    mServerText.setTextColor(getResources().getColor(R.color.main_item_text_color));
                    mMessageText.setTextColor(getResources().getColor(R.color.main_item_text_color));
                    mHomeText.setTextColor(getResources().getColor(R.color.main_item_text_color));
                    mFanliText.setTextColor(getResources().getColor(R.color.main_item_text_color));
    }

    private Fragment mHomeFragment;
    private Fragment mMineFragment;
    private Fragment mServerFragment;
    private Fragment mMessageFragment;
    private Fragment mFanliFragment;
    private Fragment currentFragment;
    //主要是这个方法,判断有没有添加过,有的话显示,没有的话先添加
    public void replaceFragment(Fragment fragment){
        if (mFragmentManager==null){
            mFragmentManager = getFragmentManager();
        }

        FragmentTransaction transaction = mFragmentManager.beginTransaction();
        if (fragment.isAdded()){
            transaction.show(fragment);
        }else{
            transaction.add(R.id.main_frame_layout,fragment);
        }
        if (currentFragment!=null){
            transaction.hide(currentFragment);
        }
        currentFragment=fragment;
        transaction.commit();
    }

//判断各个页面的fragment是否加载过,如果没有则new出来
private Fragment newHomeFragment() {
        if (mHomeFragment == null) {
            mHomeFragment = new HomeFragment();
            return mHomeFragment;
        } else {
            return mHomeFragment;
        }
    }
    private Fragment newMineFragment() {
         if (mMineFragment==null) {
             mMineFragment=new MineFragment();
            return mMineFragment;
         }else {
          return mMineFragment;
         }
    }
    private Fragment newServerFragment() {
        if (mServerFragment == null) {
            mServerFragment = new ServerFragment();
            return mServerFragment;
        } else {
            return mServerFragment;
        }
    }
    private Fragment newMessageFragment() {
        if (mMessageFragment == null) {
            mMessageFragment = new MessageFragment();
            return mMessageFragment;
        } else {
            return mMessageFragment;
        }
    }
    private Fragment newFanliFragment() {
        if (mFanliFragment == null) {
            mFanliFragment = new FanliFragment();
            return mFanliFragment;
        } else {
            return mFanliFragment;
        }
    }

应该没有问题,如果有什么不懂的欢迎提问,虽然楼主不一定能够解答哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值