智慧北京:内容页面tab的切换的实现

1、完成其他Tab对应的Controller的初始化

仅仅复制HomeTabControler,稍微修改参数,然后添加到mPagerDatas即可

2、完成内容页面tab的切换的实现

(1)滑动屏幕无切换切换效果,点击按钮才有效果;

定义一个NOScrollViewPager实现这个功能

(2)给ViewPager绑定相应的RadioButton;

mRadioGroup.setOnCheckedChangeListener(this);

通过RadioButton的ID,得到Item的ID

mViewPager.setCurrentItem(Item);

(3)设置默认的点击按钮为第一个RadioButton。

mRadioGroup.check(R.id.content_home);

介绍下touch事件传递机制

//分派事件
public boolean dispatchTouchEvent(MotionEvent ev)
//拦截事件 
public boolean onInterceptTouchEvent(MotionEvent ev)
//处理事件
public boolean onTouchEvent(MotionEvent event)

这三个方法主要在三种类被调用,那三种类呢?

基类 例子类 拥有的方法
继承Activity(activity类) MainActivity(因项目而异)
dispatchTouchEvent,onTouchEvent
继承ViewGroup(View容器) RelativeLayout,FrameLayout,LinearLayout,AbsoluteLayout,ListView,ScrollView…
dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent
继承View(View控件) Button,EditText,TextView,ImageView….
dispatchTouchEvent,onTouchEvent

这三个方法的含义是什么呢?

事件 含义
dispatchTouchEvent
用来分派事件。
其中调用了onInterceptTouchEvent()和onTouchEvent(),一般不重写该方法
onInterceptTouchEvent
用来拦截事件。
ViewGroup类中的源码实现就是{return false;}表示不拦截该事件,
事件将向下传递(传递给其子View);
若手动重写该方法,使其返回true则表示拦截,事件将终止向下传递,
事件由当前ViewGroup类来处理,就是调用该类的onTouchEvent()方法
onTouchEvent
用来处理事件。
返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View);
返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理

__________________________NoScrollViewPager.java___________________________package huaxa.it.zhihuidemo;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;


/**
 * @项目名: ZhiHuiDemo
 * @包名: huaxa.it.zhihuidemo
 * @类名: NoScrollViewPager
 * @创建者: 黄夏莲
 * @创建时间: 2016年10月9日 ,上午7:54:23
 * 
 * @描述: 不可滑动的ViewPager
 */
public class NoScrollViewPager extends ViewPager
{
	public NoScrollViewPager(Context context, AttributeSet attr)
	{
		super(context, attr);
	}


	public NoScrollViewPager(Context context)
	{
		super(context);
		// TODO Auto-generated constructor stub
	}


	@Override
	public boolean onTouchEvent(MotionEvent ev)
	{
		// 不消费
		return false;
	}


	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev)
	{
		// 不拦截
		return false;
	}


}





_______________ContentFragment.java________________________<pre name="code" class="html">package huaxa.it.zhihuidemo.fragment;

import java.util.ArrayList;
import java.util.List;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;

import huaxa.it.zhihuidemo.BaseFragment;
import huaxa.it.zhihuidemo.MainUI;
import huaxa.it.zhihuidemo.R;
import huaxa.it.zhihuidemo.base.TabController;
import huaxa.it.zhihuidemo.base.tab.SettingTabController;
import huaxa.it.zhihuidemo.base.tab.HomeTabController;
import huaxa.it.zhihuidemo.base.tab.NewsCenterTabController;
import huaxa.it.zhihuidemo.base.tab.GovAffairTabController;
import huaxa.it.zhihuidemo.base.tab.SmartServiceTabController;
import android.R.menu;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

/**
 * @项目名: ZhiHuiDemo
 * @包名: huaxa.it.zhihuidemo.fragment
 * @类名: ContentFragment
 * @创建者: 黄夏莲
 * @创建时间: 2016年10月5日 ,下午11:31:04
 * 
 * @描述: 内容页面
 */
public class ContentFragment extends BaseFragment implements
		OnCheckedChangeListener
{
	// xUtils的view注解要求必须提供id,以使代码不受影响。
	@ViewInject(R.id.content_pager)
	private ViewPager			mViewPager;
	@ViewInject(R.id.content_radiogroup)
	private RadioGroup			mRadioGroup;

	private List<TabController>	mPagerDatas;

	@Override
	protected View initView()
	{
		// TextView text = new TextView(mActivity);
		//
		// text.setText("主页面");
		// text.setTextSize(25);
		// text.setGravity(Gravity.CENTER);
		// return text;
		View view = View.inflate(mActivity, R.layout.content, null);

		// 注入ViewUtils工具
		ViewUtils.inject(this, view);// 注入view和事件

		// 设置RadioGroup的监听器
		mRadioGroup.setOnCheckedChangeListener(this);
		// 设置RadioGroup的默认值
		mRadioGroup.check(R.id.content_home);

		return view;

	}

	@Override
	protected void initData()
	{
		// 数据初始化
		mPagerDatas = new ArrayList<TabController>();
		mPagerDatas.add(new HomeTabController(mActivity));
		mPagerDatas.add(new NewsCenterTabController(mActivity));
		mPagerDatas.add(new SmartServiceTabController(mActivity));
		mPagerDatas.add(new GovAffairTabController(mActivity));
		mPagerDatas.add(new SettingTabController(mActivity));

		// 给ViewPager去加载数据
		mViewPager.setAdapter(new ContentPagerAdapter());// adapter --> list<数据类型>

	}

	class ContentPagerAdapter extends PagerAdapter
	{

		@Override
		public int getCount()
		{
			if (mPagerDatas != null)
			{
				return mPagerDatas.size();
			}
			return 0;
		}

		@Override
		public boolean isViewFromObject(View view, Object object)
		{
			// TODO Auto-generated method stub
			return view == object;
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position)
		{
			TabController controller = mPagerDatas.get(position);// 快捷键ALT+Shift+l补全对象
			// 获取根视图
			View rootView = controller.getRootView();
			container.addView(rootView);

			// 设置数据
			controller.initData();

			return rootView;
		}

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

	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId)
	{
		int currentItem = -1;
		// 判断选中了哪个RadioButton
		switch (checkedId)
		{
			case R.id.content_home:
				currentItem = 0;
				// 设置菜单不可以滑动,即菜单不可见
				setSlidingMenuTouchEvent(false);
				break;
			case R.id.content_newscenter:
				currentItem = 1;
				// 设置菜单可以滑动,即菜单可见
				setSlidingMenuTouchEvent(true);
				break;
			case R.id.content_service:
				currentItem = 2;
				// 设置菜单可以滑动,即菜单可见
				setSlidingMenuTouchEvent(true);
				break;
			case R.id.content_govaffairs:
				currentItem = 3;
				// 设置菜单可以滑动,即菜单可见
				setSlidingMenuTouchEvent(true);
				break;
			case R.id.content_set:
				currentItem = 4;
				// 设置菜单不可以滑动,即菜单不可见
				setSlidingMenuTouchEvent(false);
				break;
			default:
				break;
		}
		// 设置ViewPager选中的页面
		mViewPager.setCurrentItem(currentItem);

	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值