我有同样的问题。解决方案并不简单。
-
listView.setFocusableInTouchMode(false);
- 如果您需要焦点,请从 onItemSelected 侦听器中调用它。
2. - 使用 OnInterceptTouchEvent 从您的孩子那里获取触摸事件。并在 onScroll 和 onTouchEvent 中进行一些修改
OnItemSelectedListener mOnItemSelected = new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView parent, View view,
int position, long id)
{
view.requestFocusFromTouch();
}
@Override
public void onNothingSelected(AdapterView parent)
{
}
};
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
onTouchEvent(ev);
return scrollingHorizontally;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(Math.abs(distanceX)>Math.abs(distanceY) || scrollingHorizontally == true){
scrollingHorizontally = true;
super.onScroll(e1, e2, distanceX, distanceY);
}
return scrollingHorizontally;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
scrollingHorizontally = false;
break;
default:
break;
}
super.onTouchEvent(event);
return scrollingHorizontally;
}