Android ListView的item中嵌套ScrollView的解决办法

时间:2021-05-20

前沿:有时候,listview 的item要显示的字段比较多,考虑到显示问题,item外面不得不嵌套ScrollView来实现,于是问题来了,当listview需要做点击事件时,由于ScrollView的嵌套使用,拦截了listvew点击事件:只好重写listview来实现了。

/*** * @author 作者:易皇星* * @da2016年10月24日 时间:* * @toTODO 类描述: 解决 ListView中嵌套ScrollView,ScrollView拦截ListView的Item点击事件的解决办法* * * 在listview中嵌套ScrollView,发现横滑竖滑都正常,但是无法单击Listview的Item。查询Android分发机制后解决,继承Listview重写Listview的onInterceptTouchEvent。* * onInterceptTouchEvent中总是调用listview的onTouchEvent保证listview的事件都执行,* super.onInterceptTouchEvent(ev)不会拦截需要传递给ScrollView的横滑。*/public class MyListView extends ListView {private int flag = 0;private float StartX;private float StartY;public MyListView(Context context) {super(context);// TODO Auto-generated constructor stub}public MyListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public MyListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {// 总是调用listview的touch事件处理onTouchEvent(ev);if (ev.getAction() == MotionEvent.ACTION_DOWN) {StartX = ev.getX();StartY = ev.getY();return false;}if (ev.getAction() == MotionEvent.ACTION_MOVE) {float ScollX = ev.getX() - StartX;float ScollY = ev.getY() - StartY;// 判断是横滑还是竖滑,竖滑的话拦截move事件和up事件(不拦截会由于listview和scrollview同时执行滑动卡顿)if (Math.abs(ScollX) < Math.abs(ScollY)) {flag = 1;return true;}return false;}if (ev.getAction() == MotionEvent.ACTION_UP) {if (flag == 1) {return true;}return false;}return super.onInterceptTouchEvent(ev);}}

以上所述是小编给大家介绍的Android ListView的item中嵌套ScrollView的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章