我有一个视图,我将其添加到窗口管理器中。在添加之前,我检查它是否已经添加到窗口管理器中,就像在stackoverflow上的另一个问题一样:
SELECT c.*, GROUP_CONCAT(ct.tagid) FROM cards as c LEFT JOIN cardtag as ct ON c.id = ct.cardid AND ct.deleted != 1 LEFT JOIN tags as t ON t.id = ct.tagid AND t.deleted != 1 AND t.id IN ([list_of_comma_separated_tag_ids]) GROUP BY c.id HAVING COUNT(ct.tagid) >= COUNT(t.id) AND COUNT(t.id) = [list_of_comma_separated_tag_ids.length] AND c.deleted = 0
但是在Android 5的某些设备上存在以下异常:
protected void addViewToWindow(@NonNull OverlayLayout view) {
if (view.getWindowToken() == null) {
handler.post(() -> windowManager.addView(view, view.getViewParams()));
}
}
我该如何解决这个问题?请帮帮我
答案 0 :(得分:2)
您正在检查视图是否附加到窗口,然后再调用handler.post
进行附加。视图最终会在您的支票与Looper
处理您的回调之间相互关联。您应该将检查if (view.getWindowToken() == null)
移动到传递给post
的回调中,因此在您尝试将视图附加到窗口之前会立即进行此检查。