我正在Android Studio的Fragment中使用PDFViewer。在此处找到库:https://github.com/barteksc/AndroidPdfViewer
当我允许该库处理所有触摸事件时,该库工作正常,但是当发生onSingleTapConfirmed事件时,我想在我的活动(SingleTouchImageViewActivity)中隐藏系统工具栏。由于OnTouchListener在另一个类(DragPinchManager)中,因此无法引用Activity中的Window来标记全屏。我得到一个空指针异常。
2020-04-28 19:00:02.952 22265-22265/com.biggerbytes.gospeltruth E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.biggerbytes.gospeltruth, PID: 22265
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Window.addFlags(int)' on a null object reference
at com.biggerbytes.gospeltruth.SingleTouchImageViewActivity.hideSystemUI(SingleTouchImageViewActivity.java:1109)
at com.biggerbytes.gospeltruth.SingleTouchImageViewActivity.runFullScreenCheck(SingleTouchImageViewActivity.java:900)
at com.github.barteksc.pdfviewer.DragPinchManager.onSingleTapConfirmed(DragPinchManager.java:80)
at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:316)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
这是DragPinchManager中的代码:
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
SingleTouchImageViewActivity stiva = new SingleTouchImageViewActivity();
stiva.hideSystemUI();
这是SingleTouchImageViewActivity中的相应代码:
public void hideSystemUI() {
FullScreenMode = true;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
if(Build.VERSION.SDK_INT < 19) { // lower api
getWindow().getDecorView().setSystemUiVisibility(View.GONE);
} else {
//for new api versions.
// View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}
toolbarTop.setVisibility(View.GONE);
toolbarBottom.setVisibility(View.GONE);
}
如何修复nullPointerException并在SingleTapConfirmed上隐藏导航?谢谢!
正如@CommonsWare所说的,永远不要自己创建活动的实例。
此崩溃是因为您使用窗口对象,而您的活动没有窗口!
要解决此问题,请使用Intent启动您的活动
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Intent i = new Intent(this, SingleTouchImageViewActivity.class);
startActivity(i);
}
然后在onCreate
的SingleTouchImageViewActivity
内部调用hideSystemUI
方法