此功能是在上一篇博客的基础上进行改进,增加了底部切换标签,此处是使用Fragment,底部使用radioGroup+radioButton,添加5个子fragment到该Fragment
在这个小案例中添加了一些小细节:
1.将不需要有侧滑菜单的子Fragment进行隐藏侧滑图标
2.定义一个方法使该页面真正不能有侧滑菜单
3.更改各个子Fragment的标题
4.自定义ViewPager利用事件分发机制禁止ViewPager的左右滑动
首先是布局文件
?xml version="1.0" encoding="utf-8"?>
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() {
}
}
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("首页");
}
}
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