Я использую PDFViewer во фрагменте в Android Studio. Библиотека найдена здесь: https://github.com/barteksc/AndroidPdfViewer
Эта библиотека прекрасно работает, когда я разрешаю библиотеке обрабатывать все сенсорные события, но я хочу скрыть системные панели инструментов в своем действии (SingleTouchImageViewActivity), когда происходит событие onSingleTapConfirmed. Так как OnTouchListener находится в другом классе (DragPinchManager), я не могу сослаться на Окно в моей Деятельности, чтобы отметить полноэкранный режим. Я получаю исключение нулевого указателя.
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 publi c boolean 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), передавая тот контекст, который он получил от SingleTouchImageViewActivity, когда PDF-файл инициировал событие одиночного касания. По какой-то причине stiva имеет значение null, когда DragPinchManager пытается сослаться на него. Можете ли вы помочь мне с этим?
Кроме того, я не уверен, как использовать контекст, который я передаю в hideSystemUI ().
Вот то, что я думаю, что это будет, но я думаю, Я далеко ...
SingleTouchImageViewActivity.context.getWindow().getDecorView().setSystemUiVisibility(View.GONE);