fragment 深入理解 及 代码 封装

FragmentActivity和Activity的具体区别在哪里

fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,而fragmentActivity就是这个兼容包里面的,它提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
下面是API中的原话:
FragmentActivity is a special activity provided in the Support Library to handle fragments on system versions older than API level 11. If the lowest system version you support is API level 11 or higher, then you can use a regular Activity.

1、fragmentactivity 继承自activity,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入support包,同时继承fragmentActivity,这样在activity中就能嵌入fragment来实现你想要的布局效果。 
2、当然3.0之后你就可以直接继承自Activity,并且在其中嵌入使用fragment了。 
3、获得Manager的方式也不同 
3.0以下:getSupportFragmentManager() 
3.0以上:getFragmentManager() 

/**
     * 替换fragment并提交
     * 
     * @param resId
     * @param fragment
     */
    public void replaceFragment(int resId, Fragment fragment) {
        if (manager != null && fragment != null) {
            manager.beginTransaction()
                    .replace(resId, fragment, fragment.getClass().getName())
                    .commitAllowingStateLoss();
        }
    }

    /**
     * 创建一个新的fragment,并替换提交
     * 
     * @param resId
     * @param clz
     *            BaseFragment类
     * @param bundle
     * @param callback
     */
    public void replaceFragment(int resId, Class<? extends Fragment> clz,
            Bundle bundle, FragmentCallback callback) {
        Fragment fragment = createFragment(clz, bundle, callback);
        replaceFragment(resId, fragment);
    }

    /**
     * 添加指定fragment
     * 
     * @param resId
     * @param fragment
     */
    public void addFragment(int resId, Fragment fragment) {
        if (manager != null && fragment != null) {
            manager.beginTransaction()
                    .add(resId, fragment, fragment.getClass().getName())
                    .commitAllowingStateLoss();
        }
    }

    /**
     * 创建一个新的fragment,并添加提交
     * 
     * @param resId
     * @param clz
     * @param bundle
     * @param callback
     */
    public void addFragment(int resId, Class<? extends Fragment> clz,
            Bundle bundle, FragmentCallback callback) {
        Fragment fragment = createFragment(clz, bundle, callback);
        addFragment(resId, fragment);
    }

    /**
     * 删除指定的fragment
     * 
     * @param fragment
     */
    public void removeFragment(Fragment fragment) {
        if (manager != null && fragment != null) {
            manager.beginTransaction().remove(fragment)
                    .commitAllowingStateLoss();
        }
    }

    /**
     * 删除指定tag对应的fragment
     * 
     * @param tag
     */
    public void removeFragment(String tag) {
        if (manager != null) {
            Fragment fragment = manager.findFragmentByTag(tag);
            removeFragment(fragment);
            manager.popBackStackImmediate(tag,
                    FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    }

    /**
     * 创建一个新的BaseFragment 或者 BaseDialogFragment
     * 
     * @param clz
     * @param bundle
     * @param callback
     * @return
     */
    public Fragment createFragment(Class<? extends Fragment> clz,
            Bundle bundle, FragmentCallback callback) {
        if (clz != null) {
            if (BaseFragment.class.isAssignableFrom(clz)) {
                return BaseFragment.newInstance(this, clz, bundle, callback);
            } else if (BaseDialogFragment.class.isAssignableFrom(clz)) {
                return BaseDialogFragment.newInstance(this, clz, bundle,
                        callback);
            }
        }
        return null;
    }

    /**
     * 查找指定tag对应的fragment
     * 
     * @param tag
     * @return
     */
    public Fragment findFragmentByTag(String tag) {
        if (manager != null) {
            return manager.findFragmentByTag(tag);
        }

        return null;
    }

    /**
     * 查找指定id对应的fragment
     * 
     * @param id
     * @return
     */
    public Fragment findFragmentByID(int id) {
        if (manager != null) {
            return manager.findFragmentById(id);
        }

        return null;
    }

    /**
     * 显示fragment时实现过渡动画
     * 
     * @param tag
     * @param layoutId
     * @param fragment
     * @param type
     *            动画种类,0,下方进入,1左方进入,2右方进入
     */
    public void showFragment(String tag, int layoutId, Fragment fragment,
            int type) {
        // tagSet.add(tag);
        try {
            if (this.isFinishing()) {
                return;
            }
            if (fragment == null || TextUtils.isEmpty(tag)) {
                return;
            }
            FragmentTransaction ft = manager.beginTransaction();
            switch (type) {
            case ANIM_BOTTOM:
                ft.setCustomAnimations(R.anim.bottom_in, R.anim.bottom_out);
                break;
            case ANIM_LEFT:
                ft.setCustomAnimations(R.anim.left_in, R.anim.left_out);
                break;
            case ANIM_RIGHT:
                ft.setCustomAnimations(R.anim.right_in, R.anim.right_out);
                break;
            case ANIM_DEFAULT:
                break;
            case ANIM_FADE:
                ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
                break;
            default:
                ft.setCustomAnimations(R.anim.bottom_in, R.anim.bottom_out);
                break;
            }

            // Fragment prev = manager.findFragmentByTag(tag);
            // if (prev != null) {
            // ft.remove(prev);
            // }
            // ft.addToBackStack(null);
            ft.replace(layoutId <= 0 ? R.id.base_extra_layout : layoutId,
                    fragment, tag);

            ft.addToBackStack(tag).commitAllowingStateLoss();

        } catch (Exception e) {
        }
    }

    /**
     * 显示fragment时实现过渡动画,从下方进入。 参见
     * {@link #showFragment(String, int, Fragment, int)}
     * 
     * @param tag
     * @param layoutId
     * @param fragment
     */
    public void showFragment(String tag, int layoutId, Fragment fragment) {
        showFragment(tag, layoutId, fragment, ANIM_BOTTOM);
    }

    public void showFragment(int layoutId, Fragment fragment) {
        showFragment(fragment.getClass().getName(), layoutId, fragment,
                ANIM_BOTTOM);
    }

    /**
     * 创建一个新的fragment并显示,实现过渡动画。 参见
     * {@link #showFragment(String, int, Fragment, int)}
     * 
     * @param layoutId
     * @param clz
     * @param bundle
     * @param callback
     * @param type
     */
    public void showFragment(int layoutId, Class<? extends Fragment> clz,
            Bundle bundle, FragmentCallback callback, int type) {
        Fragment fragment = createFragment(clz, bundle, callback);
        if (fragment != null) {
            showFragment(clz.getName(), layoutId, fragment, type);
        }
    }

    /**
     * 创建一个新的fragment并显示,实现过渡动画,从下方进入。 参见
     * {@link #showFragment(String, int, Fragment, int)}
     * 
     * @param layoutId
     * @param clz
     * @param bundle
     * @param callback
     */
    public void showFragment(int layoutId, Class<? extends Fragment> clz,
            Bundle bundle, FragmentCallback callback) {
        showFragment(layoutId, clz, bundle, callback, ANIM_BOTTOM);
    }

    /**
     * 关闭指定tag的Fragment
     * 
     * @param tag
     */
    public boolean closeFragment(final String tag) {
        try {
            if (this.isFinishing() || manager == null) {
                return false;
            }

            if (!manager.popBackStackImmediate(tag,
                    FragmentManager.POP_BACK_STACK_INCLUSIVE)) {
                FragmentTransaction ft = manager.beginTransaction();
                Fragment prev = manager.findFragmentByTag(tag);
                if (prev != null) {
                    int i = ft.remove(prev).commitAllowingStateLoss();
                    return i > 0 ? true : false;
                }
            } else {
                UCARDebug.Log("closeFragment",
                        "closeFragment popBackStackImmediate");

                return true;
            }

        } catch (Exception e) {
        }

        return false;
    }

    /**
     * 关闭指定class的Fragment
     * 
     * @param clz
     */
    public boolean closeFragment(Class<? extends Fragment> clz) {
        if (clz == null) {
            return false;
        }
        UCARDebug.Log("closeFragment", "closeFragment " + clz.getName());
        return closeFragment(clz.getName());
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值