2015-01-27 18 views
6

Trong cách bố trí của tôi, tôi có một cấu trúc như thế:Làm cách nào để xử lý nhấp trong Chế độ xem con và chạm vào Chế độ xem nhóm gốc?

--RelativeLayout 
    | 
    --FrameLayout 
    | 
    --Button, EditText... 

Tôi muốn để xử lý các sự kiện liên lạc trong RelativeLayout và trong FrameLayout, vì vậy tôi đặt onTouchListener trong hai nhóm xem. Nhưng chỉ có liên lạc trong RelativeLayout bị bắt.

Để cố gắng giải quyết điều này, tôi đã viết CustomRelativeLayout của riêng mình và ghi đè lên onInterceptTouchEvent, bây giờ nhấp vào ViewGroup của trẻ (FrameLayout) bị bắt, nhưng nhấp chuột trong các nút và các chế độ xem khác không có hiệu lực.

Trong bố trí tùy chỉnh của riêng tôi, tôi có điều này:

public boolean onInterceptTouchEvent(MotionEvent ev) { 
    return true; 
} 

Trả lời

6

Bạn cần ghi đè số onInterceptTouchEvent() cho mỗi đứa trẻ, nếu không nó sẽ vẫn là onTouchEvent cho cha mẹ.

Intercept Touch Events in a ViewGroup

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    /* 
    * This method JUST determines whether we want to intercept the motion. 
    * If we return true, onTouchEvent will be called and we do the actual 
    * scrolling there. 
    */ 
... 
    // In general, we don't want to intercept touch events. They should be 
    // handled by the child view. 
    return false; 
} 

Bạn cần phải trả lại sai để có con xử lý nó, nếu không bạn được trả lại cho phụ huynh.

+1

Giả sử tôi muốn ghi đè các sự kiện liên lạc chỉ để xử lý một số trẻ em, tôi có thể làm gì bên trong chức năng này để hoạt động? Ý tôi là, đối với một số trẻ em, nó sẽ hoạt động như thường lệ, và đối với một số người, quan điểm của phụ huynh sẽ quyết định xem họ có nhận được sự kiện liên lạc hay không. –

+0

@androiddeveloper thực sự là một câu hỏi hay. Tại sao bạn không đăng nó như một câu hỏi? –

+0

@androiddeveloper Tôi đã hỏi và trả lời câu hỏi này tại đây: http://stackoverflow.com/questions/30966412/how-to-vary-between-child-and-parent-view-group-touch-events nếu bạn quan tâm. –

1

giải pháp tùy chỉnh của bạn sẽ nắm bắt được các sự kiện liên lạc từ bất cứ nơi nào trong cách bố trí tương đối của mình kể từ khi phương pháp ghi đè được thiết lập để luôn luôn ném đúng.

Đối với yêu cầu của bạn, tôi đoán tốt hơn nên sử dụng phương thức onClick thay vì sử dụng onTouch.

phương pháp OnTouch gọi chủ đề khác nhau trên mỗi TouchEvent và tôi đoán đó là nguyên nhân của vấn đề của bạn

Thay vì xử lý những sự kiện của nó tốt hơn để thử phương pháp onClick.

+0

Cảm ơn bạn, nhưng ngay cả khi tôi đặt onClick trong hai nhóm chế độ xem, chỉ nhấp vào trong lần đầu tiên (RelativeLayout) được xử lý. – androidevil

+1

Chia sẻ mã chắc chắn sẽ làm mọi thứ rõ ràng hơn. – testuserx

Các vấn đề liên quan