2013-09-10 5 views
0

Я создал экземпляр типа фрагмента, который расширяет CameraFragment (и реализует TabListener), и я пытаюсь вызвать autoFocus() из родительской активности. Вызов autoFocus() из фрагмента, который расширяет CameraFragment, отлично работает, но вызов его из родительского действия приводит к NPE. Я слушаю событие onKeyDown() в основном мероприятии, которое работает так, как ожидалось, как в logcat. Вот мой NPE след:Вызов autoFocus() из родительской активности Возврат NPE

09-10 10:00:16.410: D/app(5283): onKeyDown: 80 

09-10 10:00:16.415: D/AndroidRuntime(5283): Shutting down VM 

09-10 10:00:16.415: W/dalvikvm(5283): threadid=1: thread exiting with uncaught exception (group=0x40f7b2a0) 

09-10 10:00:16.425: E/AndroidRuntime(5283): FATAL EXCEPTION: main 

09-10 10:00:16.425: E/AndroidRuntime(5283): java.lang.NullPointerException 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at com.commonsware.cwac.camera.CameraFragment.autoFocus(CameraFragment.java:96) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at com.me.app.appCameraFragment.callAutoFocus(cameraFragment.java:232) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at com.me.app.MainTabActivity.onKeyDown(MainTabActivity.java:264) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.view.KeyEvent.dispatch(KeyEvent.java:2705) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.app.Activity.dispatchKeyEvent(Activity.java:2423) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2019) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3851) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3799) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2934) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.os.Handler.dispatchMessage(Handler.java:99) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.os.Looper.loop(Looper.java:137) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at android.app.ActivityThread.main(ActivityThread.java:4921) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at java.lang.reflect.Method.invokeNative(Native Method) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at java.lang.reflect.Method.invoke(Method.java:511) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803) 

09-10 10:00:16.425: E/AndroidRuntime(5283):  at dalvik.system.NativeStart.main(Native Method) 

ответ

0

Я не уверен, какую версия коды вы работаете, но линия 96 является закрывающей скобкой в ​​текущем CameraFragment.

Единственный способ autoFocus() может привести к сбою с NullPointerException, если cameraView является null, и единственный способ cameraView должен быть null, если onCreateView() еще не был вызван. Вам нужно, чтобы фрагмент был видимым и полностью создан, прежде чем запрашивать автофокус.

+0

Какой они, так что это очень странно. Я думаю, проблема может быть связана с тем, что этот фрагмент реализует TabListener. При выборе вкладки интерфейс TabListener требует создания экземпляра фрагмента ('mFragment'). Когда я вызываю 'autoFocus()', я получаю NPE. Однако, когда я называю 'mFragment.autoFocus()', автофокусировка правильно выполняется. Я не уверен, правильно ли понимаю это, но это работает для меня. Дайте мне знать, можете ли вы понять это. – ktal90

+0

@ ktal90: Похоже, что у вас есть два экземпляра «CameraFragment», возможно, из предыдущего переключателя табуляции или чего-то еще. – CommonsWare

Смежные вопросы