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的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!