Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android ListView的item中嵌套ScrollView的解決辦法

Android ListView的item中嵌套ScrollView的解決辦法

編輯:關於Android編程

 前沿:有時候,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的解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved