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的横滑。

*/

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

}

@Override

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

以上是 Android ListView的item中嵌套ScrollView的解决办法 的全部内容, 来源链接: utcz.com/z/333938.html

回到顶部