Android UI-实现底部切换标签之方式一 ──fragment(底部采用radioGroup+radiobutton)添加5个子fragment

Android UI-实现底部切换标签之方式一 ──fragment(底部采用radioGroup+radiobutton)添加5个子fragment_第1张图片



此功能是在上一篇博客的基础上进行改进,增加了底部切换标签,此处是使用Fragment,底部使用radioGroup+radioButton,添加5个子fragment到该Fragment

在这个小案例中添加了一些小细节:

1.将不需要有侧滑菜单的子Fragment进行隐藏侧滑图标

2.定义一个方法使该页面真正不能有侧滑菜单

3.更改各个子Fragment的标题

4.自定义ViewPager利用事件分发机制禁止ViewPager的左右滑动


首先是布局文件




    

    

    

        

        

        
    





    
    

    
    

?xml version="1.0" encoding="utf-8"?>


    

    

写好子Fragment的基类,提高代码的复用性

public abstract class BasePager {
    public Activity mContext;
    public final View rootView;
    private final FrameLayout mFlContent;
    public final TextView tvTitle;
    public final ImageView ivMenu;

    public BasePager(final Activity mContext) {
        this.mContext = mContext;
        rootView = View.inflate(mContext, R.layout.view_base_pager, null);
        tvTitle = (TextView) rootView.findViewById(R.id.tv_head_title);
        ivMenu = (ImageView) rootView.findViewById(R.id.iv_menu);
        mFlContent = (FrameLayout) rootView.findViewById(R.id.fl_pager_content);
        mFlContent.addView(initView());
        ivMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((MainActivity) mContext).toggle();
            }
        });
    }

    public abstract View initView();

    public void initData() {

    }
}

子Fragment,此处只列举一个,其它两个类似

public class HomePager extends BasePager {
    public HomePager(Activity mContext) {
        super(mContext);
    }

    @Override
    public View initView() {
        TextView tv=new TextView(mContext);
        tv.setText("首页");
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(17);
        return  tv;
    }

    @Override
    public void initData() {
        ivMenu.setVisibility(View.GONE);
        tvTitle.setText("首页");
    }
}


将子Fragment添加到ContentFragment

public class ContentFragment extends Fragment {
    private List pagers = new ArrayList();
    private ViewPager vpContent;
    private RadioGroup rgContent;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View contentView = View.inflate(getContext(), R.layout.fragment_content, null);

        vpContent = (ViewPager) contentView.findViewById(R.id.vp_content);
        rgContent = (RadioGroup) contentView.findViewById(R.id.rg_content);
        return contentView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        pagers.add(new HomePager(getActivity()));
        pagers.add(new NewsPager(getActivity()));
        pagers.add(new SettingPager(getActivity()));

        ContentAdapter adapter = new ContentAdapter();
        vpContent.setAdapter(adapter);
        //初始化第一次加载
        pagers.get(0).initData();
        ((MainActivity)getActivity()).setMenuLock(true);//第一页禁用侧边栏
        initEvent();
    }

    private void initEvent() {
        //将RadioGroup与ViewPager相关联
        rgContent.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int checkId) {
                switch (checkId) {
                    case R.id.rb_home:
                        vpContent.setCurrentItem(0);
                        ((MainActivity)getActivity()).setMenuLock(true);
                        break;

                    case R.id.rb_news:
                        vpContent.setCurrentItem(1);
                        ((MainActivity)getActivity()).setMenuLock(false);

                        break;

                    case R.id.rb_setting:
                        vpContent.setCurrentItem(2);
                        ((MainActivity)getActivity()).setMenuLock(true);
                        break;
                }
            }
        });

        vpContent.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                BasePager basePager = pagers.get(position);
                basePager.initData();
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    public class ContentAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return pagers.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            BasePager basePager = pagers.get(position);
            container.addView(basePager.rootView);
            return basePager.rootView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
}


自定义ViewPager

/**
 * 该自定义ViewPager类利用事件分发禁止ViewPager的左右滑动
 */

public class CustomViewPager extends ViewPager {
    public CustomViewPager(Context context) {
        super(context);
    }

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return  true;
    }
}

搞定!!!

Demo下载地址:http://download.csdn.net/detail/k2514091675/9803015



你可能感兴趣的:(DrawerLayout,底部切换标签)