此功能是在上一篇博客的基础上进行改进,增加了底部切换标签,此处是使用Fragment,底部使用radioGroup+radioButton,添加5个子fragment到该Fragment
在这个小案例中添加了一些小细节:
1.将不需要有侧滑菜单的子Fragment进行隐藏侧滑图标
2.定义一个方法使该页面真正不能有侧滑菜单
3.更改各个子Fragment的标题
4.自定义ViewPager利用事件分发机制禁止ViewPager的左右滑动
首先是布局文件
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/vp_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
android:id="@+id/rg_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:id="@+id/rb_home"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@mipmap/ic_launcher"
android:gravity="center"
android:textColor="#9b979a"
android:text="首页"/>
android:id="@+id/rb_news"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@mipmap/ic_launcher"
android:gravity="center"
android:textColor="#9b979a"
android:text="新闻"/>
android:id="@+id/rb_setting"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@mipmap/ic_launcher"
android:gravity="center"
android:textColor="#9b979a"
android:text="设置"/>
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/fl_pager_content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="#9b979a">
android:id="@+id/iv_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:background="@drawable/img_menu"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
/>
android:id="@+id/tv_head_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题"
android:textColor="#fff"
android:textSize="20sp"
android:layout_centerInParent="true"
/>
写好子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..net/detail/k2514091675/9803015