Преглед на файлове

Merge branch 'fixContextMenuWindowManagerBadTokenException' into 'master'

修正Context Menu WindowManager$BadTokenException

See merge request kdanandroid/pdf/pdfreaderreadermodule!49
Cooper Ku преди 5 години
родител
ревизия
c1a6d146c7
променени са 1 файла, в които са добавени 29 реда и са изтрити 1 реда
  1. 29 1
      src/main/java/com/kdanmobile/reader/screen/contextmenu/MyKMPDFContextMenuCallback.kt

+ 29 - 1
src/main/java/com/kdanmobile/reader/screen/contextmenu/MyKMPDFContextMenuCallback.kt

@@ -72,7 +72,35 @@ open class MyKMPDFContextMenuCallback(private val kmpdfFactory: KMPDFFactory?) :
             }
             popupWindow?.isOutsideTouchable = false
             popupWindow?.isFocusable = false
-            popupWindow?.showAtLocation(view, Gravity.LEFT or Gravity.TOP, position.x, position.y)
+            tryToShowPopupWindow(view, position)
+        }
+    }
+
+    private fun tryToShowPopupWindow(view: View, position: Point) {
+        if (null != view.windowToken) {
+            showPopupWindow(view, position)
+        } else {
+            view.addOnAttachStateChangeListener(object: View.OnAttachStateChangeListener {
+                override fun onViewAttachedToWindow(view: View) {
+                    if (null != view.windowToken) {
+                        showPopupWindow(view, position)
+                        view.removeOnAttachStateChangeListener(this)
+                    }
+                }
+
+                override fun onViewDetachedFromWindow(view: View) {
+                }
+            })
+        }
+    }
+
+    private fun showPopupWindow(view: View, position: Point) {
+        view.post {
+            try {
+                popupWindow?.showAtLocation(view, Gravity.LEFT or Gravity.TOP, position.x, position.y)
+            } catch (e: Exception) {
+                e.printStackTrace()
+            }
         }
     }