2010-08-22 59 views
8

Tôi có sự kiện onKeyDown chỉ cần thiết để xử lý các phím phần cứng Lên và Xuống trong ứng dụng của mình. Đối với những nó trả về đúng, khi chúng được xử lý. Đối với bất cứ điều gì khác nó trả về false mà tôi hiểu có nghĩa là hệ điều hành nên xử lý chúng. Tuy nhiên, khi tôi nhấn nút Quay lại, số onKeyDown của tôi được gọi và trả về false, nhưng không có hiệu ứng nào khác. Tôi muốn/mong đợi hệ điều hành sẽ hoàn thành Activity hiện tại và tiếp tục lại phiên bản trước.Xử lý phần cứng Android Nút quay lại

Đây có phải là hành vi đúng hay không, có điều gì đó không?

Cập nhật:

Chúc mừng chàng trai, vẻ ngoài thói quen onKeyDown của tôi như thế này, bây giờ tôi đã theo CommonsWare của lời khuyên:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    super.onKeyDown(keyCode, event); 

    boolean handled = true; 

    // handle key presses 
    switch (keyCode) { 

    case KeyEvent.KEYCODE_DPAD_LEFT: 
     mCursorX = mCursorX - 1; 
     if (mCursorX < MAP_MIN_X) { mCursorX = MAP_MIN_X; } 
     break; 

    case KeyEvent.KEYCODE_DPAD_RIGHT: 
     mCursorX = mCursorX + 1; 
     if (mCursorX > MAP_MAX_X) { mCursorX = MAP_MAX_X; } 
     break; 

    default: 
     handled = false; 

    if (handled) { 
     redrawCursorno(); 
     return true; 
    } 

    return super.onKeyDown(keyCode,event); 
} 

Lớp học của tôi trông giống như:

public class Map extends Activity implements OnClickListener, SurfaceHolder.Callback, OnTouchListener { 

Tôi phải thừa nhận Tôi không biết tại sao @override và dòng 'siêu' đầu tiên ở đó, họ chỉ ở trong tất cả các thói quen mà tôi đã xem xét. Nếu super.onKeyDown chạy onKeyDown cho Activity, sau đó tôi có thể không muốn nó lúc bắt đầu, chỉ ở cuối nếu thói quen của tôi không xử lý nó, mà tôi nghĩ là những gì tôi đã thêm vào. Điều đó nghe có đúng hay tôi vẫn còn bối rối?

-Frink

+0

bạn đang thử điều này trên một chế độ xem web? – Sephy

+0

Đăng mã của bạn. – Falmarri

Trả lời

6

Tôi muốn giới thiệu chuỗi cho lớp bậc trên. Nói cách khác, thay vì:

return(false); 

làm:

return(super.onKeyDown(...)); 
4

Bạn có thể ghi đè lên các phương pháp onBackPressed(), nó sẽ được gọi khi hoạt động này đã phát hiện ra báo chí của người sử dụng phím quay lại. Trong trường hợp này, bạn không cần sử dụng phương thức onKeyDown.

+0

lưu ý rằng 'onBackPressed()' sẽ không được gọi nếu không có sửa đổi để trả về giá trị của 'super.onKeyDown()' –

1

Ngoài ra, bạn đang gọi super.onKeyDown() hai lần: một lần ở đầu hàm và một lần ở cuối. Bạn chỉ cần một cái ở cuối.

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