Android ListView的item中嵌套ScrollView的解决办法
前沿:有时候,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的横滑。 */ publicclassMyListViewextendsListView{ privateintflag=0; privatefloatStartX; privatefloatStartY; publicMyListView(Contextcontext){ super(context); //TODOAuto-generatedconstructorstub } publicMyListView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); //TODOAuto-generatedconstructorstub } publicMyListView(Contextcontext,AttributeSetattrs){ super(context,attrs); //TODOAuto-generatedconstructorstub } @Override publicbooleanonInterceptTouchEvent(MotionEventev){ //总是调用listview的touch事件处理 onTouchEvent(ev); if(ev.getAction()==MotionEvent.ACTION_DOWN){ StartX=ev.getX(); StartY=ev.getY(); returnfalse; } if(ev.getAction()==MotionEvent.ACTION_MOVE){ floatScollX=ev.getX()-StartX; floatScollY=ev.getY()-StartY; //判断是横滑还是竖滑,竖滑的话拦截move事件和up事件(不拦截会由于listview和scrollview同时执行滑动卡顿) if(Math.abs(ScollX)<Math.abs(ScollY)){ flag=1; returntrue; } returnfalse; } if(ev.getAction()==MotionEvent.ACTION_UP){ if(flag==1){ returntrue; } returnfalse; } returnsuper.onInterceptTouchEvent(ev); } }
以上所述是小编给大家介绍的AndroidListView的item中嵌套ScrollView的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!