当从另一个类引用时,Get-Window抛出null指针异常



我在安卓工作室的Fragment中使用PDFViewer。在此处找到库:https://github.com/barteksc/AndroidPdfViewer

当我允许该库处理所有触摸事件时,该库工作正常,但当onSingleTapConfirmed事件发生时,我想在活动(SingleTouchImageViewActivity(中隐藏系统工具栏。由于OnTouchListener在另一个类(DragPinchManager(中,我无法引用"活动"中的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:中的代码

Context stivaContext;

@Override公共布尔值onSingleTapConfirmed(MotionEvent e({

SingleTouchImageViewActivity singleTouchImageViewActivity = new SingleTouchImageViewActivity();
stivaContext = singleTouchImageViewActivity.getStivaContext();
singleTouchImageViewActivity.hideSystemUI(stivaContext);
return true;
}

下面是SingleTouchImageViewActivity:中的相应代码

Context stiva;    
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
stiva = context;
if(FullScreenMode) {
hideSystemUI(stiva);
}

public void hideSystemUI(Context context) {
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上隐藏导航?非常感谢。

更新:以下是我所做的。我在SingleTouchImageViewActivity中设置了一个名为stiva的上下文变量。我在调用onCreateView时设置了它。加载pdf后,我只需点击一下我的pdf。DragPinchManager调用一个方法从SingleTouchImageViewActivity获取上下文,然后调用hideSystemUI(stiva(,传入pdf触发单点事件时从SingleTouch ImageViewActivity接收的上下文。由于某种原因,当DragPinchManager试图引用stiva时,stiva为null。你能帮我吗?

此外,我不知道如何使用传递到hideSystemUI((中的上下文。

这是我想的,但我想我离还有一段路要走

SingleTouchImageViewActivity.context.getWindow().getDecorView().setSystemUiVisibility(View.GONE);

正如@CommonsWare所说,永远不要自己创建活动实例。

此崩溃是因为您使用了窗口对象,而您的活动没有窗口!

要解决此问题,请使用Intent 启动您的活动

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Intent i = new Intent(this, SingleTouchImageViewActivity.class);
startActivity(i);
}

然后在SingleTouchImageViewActivityonCreate内部调用hideSystemUI方法

最新更新