封装了一个首页导航栏fragment切换的方法,分享给大家,大神请多多指导

/**
    * 绑定fragment与Activity用于主页的导航显示
    *
    * @param fragmet_id FrameLayout的id
    * @param button_id 可以控制fragmen切换的button的id
    * @param baseFragmet 所有需要进行切换的fragment的实例数组
    * @param showFeragNum 初始化显示第几个fragment的下标
    * @param onClickListenerFrame 按钮的点击事件
    * @param isReplace 是否使用替换fragment 
*/

    public void bindFragment(@IdRes final int fragmet_id, @IdRes int[] button_id, final         BaseFragmet[] baseFragmet, int showFeragNum, final OnClickListenerFrame onClickListenerFrame,         final boolean isReplace) {

        List list = new ArrayList<>();
        supportFragmentManager = getSupportFragmentManager();
        if (!isReplace) {
            for (int i = 0; i < button_id.length; i++) {
                FragmentTransaction transaction = supportFragmentManager.beginTransaction();
                transaction.add(fragmet_id, baseFragmet[i]);
                transaction.commit();
            }
            FragmentTransaction transaction = supportFragmentManager.beginTransaction();
            transaction.show(baseFragmet[showFeragNum]);
            hitefrag(transaction, baseFragmet, showFeragNum);
            transaction.commit();
        } else {
            FragmentTransaction transaction = supportFragmentManager.beginTransaction();
            transaction.replace(fragmet_id, baseFragmet[showFeragNum]);
            transaction.commit();
        }
        for (int i = 0; i < button_id.length; i++) {
            final Integer index = new Integer(i);
            View view = findViewById(button_id[i]);
            list.add(view);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FragmentTransaction transaction = supportFragmentManager.beginTransaction();
                    if (!isReplace) {
                        transaction.show(baseFragmet[index]);
                        hitefrag(transaction, baseFragmet, index);
                    } else {
                        transaction.replace(fragmet_id, baseFragmet[index]);
                    }
                    transaction.commit();
                    baseFragmentList.onClick(onClickListenerFrame, index);
                }
            });
        }
        baseFragmentList.setViews(list);
}

private void hitefrag(FragmentTransaction transaction, BaseFragmet[] baseFragmet, int index) {
     for (int j = 0; j < baseFragmet.length; j++) {
         if (j == index)
             continue;
         transaction.hide(baseFragmet[j]);
     }
}

代码封装思想就是通过for循环添加fragment,并根据面向对象原理,使用匿名对象的方法进行点击事件的监听,分享不易,大神勿喷

你可能感兴趣的:(封装了一个首页导航栏fragment切换的方法,分享给大家,大神请多多指导)