2012-01-31 32 views
5

Tôi muốn phát hiện sự kiện Phím Quay lại trong CustomView của tôi (ví dụ: EditText). Trong nhiều trường hợp, nó đã đạt được bằng cách ghi đè onKeyDown() hoặc dispatchKeyEvent(), trong điều kiện mà CustomView của tôi có được tiêu điểm.Cách phát hiện Phím Quay lại trong CustomView

CustomView.java

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK) { 
     ..... 
     return true; 
    }else{ 
     return super.onKeyDown(keyCode, event); 
    } 
} 

Tuy nhiên, nếu một Hoạt động bao gồm các CustomView cũng được trọng các onKeyDown() hoặc dispatchKeyEvent(), nó có thể không hoạt động nhiều. Nghĩa là, Activity đã lấy Back-KeyEvent trước khi CustomView có.

Tôi ưu tiên muốn nắm bắt Back-KeyEvent trước khi Hoạt động.

hãy cho tôi biết một số ý tưởng về vấn đề này. Cảm ơn bạn.

Trả lời

0

Ghi đè trênKeyDown trong Hoạt động của bạn và trả về false. Vì vậy, sự kiện đó cũng được tuyên truyền cho các chế độ xem khác.

Nếu bạn xử lý sự kiện, hãy trả về true. Nếu bạn muốn cho phép sự kiện được xử lý bởi người nhận tiếp theo, hãy trả về false.

+2

Điều này không đúng. Phương thức 'onKeyDown' trong' Activity' được gọi khi một phím được nhấn xuống và không được xử lý bởi bất kỳ khung nhìn nào bên trong hoạt động.' Đầu tiên được gọi là onKeyDown trên View focus, sau đó là Activity, sau đó là phần còn lại. –

+0

Nhưng theo như chúng tôi đang trả về false, nó sẽ đi đến người nhận tiếp theo. Đúng? Mặc dù câu trả lời của @MoshErsan có thể thích hợp hơn để làm điều này. Nhưng như đã đề cập trong câu hỏi, onKeyDown đã bị ghi đè trong Activity, vì vậy bạn phải trả về false ở đó, cho dù thế nào đi chăng nữa! :) –

+2

Cũng giống như bạn nói. Bởi lợi của bạn, tôi có thể hiểu về thứ tự mà phương pháp được gọi. Thực ra khi tôi thử, nó là 'Xem # onKeyPreIme',' Activity # dispatchKeyEvent', 'View # dispatchKeyEvent', 'Xem # onKeyDown', rồi cuối cùng,' Activity # onKeyDown'. Cảm ơn! – Gottie

0

Bạn có thể cố gắng sử dụng

setFocusableInTouchMode(true) 
setFocusable(true) 
requestFocus() 

trên customview bạn

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