我有一个列表视图,其项目是一个linearlayout,它有一个按钮作为它的子视图.我希望linearlayout的ontouchLIstener能够正常工作.我不想用onInterceptTouchEvent.有没有办法可以通过触摸将该按钮传递给父列表视图.我试过这个 - 从按钮的onTouchListener返回true
private View.OnTouchListener buttonListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.i(TAG, "Button On Touch");
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它不会将触摸事件传递给线性布局onTouchListener.
一定有它应该工作.
Ash*_*win 10
View组的事件链就像这样 - dispatchEvent被称为.然后dispatchEvent打电话onInterceptTouchEvent.如果返回false,则触摸事件将传递给ViewGroup的子项.如果任何一个孩子消耗了这个事件(在这种情况下按钮会消耗该事件),即如果他们返回true,则动作事件不会传递给其他方法.由于该按钮是可点击的,因此在这种情况下返回true.
如果该onInterceptTouchEvent方法返回true,则子视图不会被赋予motion事件,而是调用ViewGroup onTouchListener或onTouch方法.
因此,要将触摸事件传递给父级(查看组),请onTouchListener确保 在父级(ViewGroup)的方法中返回trueonInterceptTouchEvent.你不必覆盖onDispatchTouchEvent()
@Override
public boolean onInterceptTouchEvent(MotionEvent motionEvent) {
Log.i(TAG,"PARENT.onInterceptTouchEvent");
return true;
}
Run Code Online (Sandbox Code Playgroud)
有关触摸导航如何完成的更多详细信息,请参阅此堆栈帖子
| 归档时间: |
|
| 查看次数: |
9334 次 |
| 最近记录: |