前沿:有時候,listview 的item要顯示的字段比較多,考慮到顯示問題,item外面不得不嵌套ScrollView來實(shí)現(xiàn),于是問題來了,當(dāng)listview需要做點(diǎn)擊事件時,由于ScrollView的嵌套使用,攔截了listvew點(diǎn)擊事件:只好重寫listview來實(shí)現(xiàn)了。
/*** * @author 作者:易皇星* * @da2016年10月24日 時間:* * @toTODO 類描述: 解決 ListView中嵌套ScrollView,ScrollView攔截ListView的Item點(diǎn)擊事件的解決辦法* * * 在listview中嵌套ScrollView,發(fā)現(xiàn)橫滑豎滑都正常,但是無法單擊Listview的Item。查詢Android分發(fā)機(jī)制后解決,繼承Listview重寫Listview的onInterceptTouchEvent。* * onInterceptTouchEvent中總是調(diào)用listview的onTouchEvent保證listview的事件都執(zhí)行,* 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) {// 總是調(diào)用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同時執(zhí)行滑動卡頓)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的解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VEVB武林網(wǎng)網(wǎng)站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選