2013-10-09 14 views
18

Tôi là người mới sử dụng Android và đang làm việc trên ứng dụng đầu tiên của mình.Nhấn nút menu gây ra sự cố trong Hoạt động không có ActionBar

Tôi có hoạt động chính không có ActionBar trong đó. Và tôi không muốn hiển thị bất kỳ menu nào trong số đó Activity. Mọi thứ đang hoạt động tốt Nhưng khi tôi nhấn nút menu hiện diện trong chính thiết bị, nó khiến ứng dụng của tôi buộc phải đóng thay vì chỉ bỏ qua nó.

Tôi đang phát triển cho sdk> = 8 nên tôi đang sử dụng thư viện hỗ trợ. Tôi đã thử thêm OnCreateOptionMenu() vào mã không có gì trong đó nhưng đã kết thúc với cùng một kết quả.

Tên ứng dụng của tôi là GUI và gói là gui. Đây là Logcat:

10-09 19:52:32.920: E/AndroidRuntime(7440): FATAL EXCEPTION: main 
10-09 19:52:32.920: E/AndroidRuntime(7440): java.lang.NullPointerException 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.app.Activity.onCreatePanelMenu(Activity.java:2554) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:453) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:853) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1535) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2052) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3924) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3872) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3007) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.os.Looper.loop(Looper.java:137) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at android.app.ActivityThread.main(ActivityThread.java:4921) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
10-09 19:52:32.920: E/AndroidRuntime(7440):  at dalvik.system.NativeStart.main(Native Method) 

Tôi không thể tìm ra nguyên nhân của lỗi này là gì. Xin hãy giúp tôi xác định nó. Nếu có bất kỳ thông tin nào khác thì plz cho tôi biết.

Trả lời

49

Tôi đoán rằng đây là lỗi trong thư viện AppCompat. Nếu bạn có một cái nhìn tại các mã cho ActionBarImplICS.getThemedContext() bạn thấy rằng đó là mActionBar đó là null:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r1/android/support/v7/app/ActionBarImplICS.java#ActionBarImplICS.getThemedContext%28%29

Tôi đoán là bạn đang sử dụng một hoạt động mà không có một tiêu đề (và do đó cũng mà không có thanh tác vụ):

requestWindowFeature(Window.FEATURE_NO_TITLE); 

Nếu tôi xóa mục này và khởi chạy hoạt động bằng tiêu đề/thanh tác vụ, tôi không thể tái tạo sự cố. Bây giờ, chạy ứng dụng với thanh tiêu đề khi bạn không muốn hoặc cần một ứng dụng không phải là một lựa chọn tốt. Đề nghị của tôi là bạn ghi đè lên phím bấm Menu. Ứng dụng ngừng đâm cho tôi khi tôi đã làm điều này:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
     // do nothing 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+1

Đó chỉ làm việc một cách hoàn hảo đối với tôi. Có, tôi đã tạo chủ đề tùy chỉnh cho hoạt động của mình mà không có thanh tiêu đề. Và như bạn đã chỉ ra đúng, nguyên nhân của lỗi có lẽ là hàm getThemedContext(). Cảm ơn rất nhiều vì sự giúp đỡ của bạn. Tôi hy vọng điều này sẽ có ích cho người khác. – Anjani

+0

Trong trường hợp ai đó va vào cùng một vấn đề: Tôi đang sử dụng TabMenu, vì vậy tôi phải thêm mã này vào TẤT CẢ các chế độ xem để thực sự bắt sự kiện. –

+2

@britzl bạn da mannn! –

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