在ListView控件中添加head视图为ViewPager时遇到的问题是滑动出现混乱。


 

 

 


// 通知父层ViewGroup,你不能截获
public boolean dispatchTouchEvent(MotionEvent ev) {
  bannerViewPager.requestDisallowInterceptTouchEvent(true);
  return super.dispatchTouchEvent(ev);
}

 

 

 

 // 也可以写成这样,当用户按下的时候,我们告诉父组件,不要拦截我的事件(这个时候子组件是可以正常响应事件的),拿起之后就会告诉父组件可以阻止。
 public boolean onTouch(View v, MotionEvent event) {
  switch (event.getAction()) {
  case MotionEvent.ACTION_MOVE:
   bannerViewPager.requestDisallowInterceptTouchEvent(true);
   break;
  case MotionEvent.ACTION_UP:
  case MotionEvent.ACTION_CANCEL:
   bannerViewPager.requestDisallowInterceptTouchEvent(false);
   break;
  }
  return true;
 }

 

第二种情况,Activity中嵌套fragment时无法做手势监听事件时,需要做的处理:

/**
	 * 以下的几个方法用来,让fragment能够监听touch事件
	 */
	private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(10);

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		for (MyOnTouchListener listener : onTouchListeners) {
			listener.onTouch(ev);
		}
		return super.dispatchTouchEvent(ev);
	}

	public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
		onTouchListeners.add(myOnTouchListener);
	}

	public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
		onTouchListeners.remove(myOnTouchListener);
	}

	public interface MyOnTouchListener {
		public boolean onTouch(MotionEvent ev);
	}

Fragment中该这样干:

	public void onAttach(Activity activity) {
		super.onAttach(activity);
		// 在该Fragment的构造函数中注册mTouchListener的回调
		if (mTouchListener != null) {
			if (getActivity() != null) {
				((MainActivity) getActivity()).registerMyOnTouchListener(mTouchListener);
			}
		}
	}

	private MainActivity.MyOnTouchListener mTouchListener = new MyOnTouchListener() {

		@Override
		public boolean onTouch(MotionEvent event) {
			switch (event.getAction()) {
			case MotionEvent.ACTION_MOVE:
				bannerViewPager.requestDisallowInterceptTouchEvent(true);
				break;
			case MotionEvent.ACTION_UP:
			case MotionEvent.ACTION_CANCEL:
				bannerViewPager.requestDisallowInterceptTouchEvent(false);
				break;
			}
			return true;
		}

	};


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值