razerdp / BasePopup

Android下打造通用便捷的PopupWindow弹窗库
https://github.com/razerdp/BasePopup
Apache License 2.0
5.2k stars 758 forks source link

程序崩溃问题:在弹窗中滑动seekbar过程时再点击外部区域弹窗消失后程序崩溃 #239

Closed hapzhu closed 4 years ago

hapzhu commented 5 years ago
razerdp commented 5 years ago

崩溃信息没有一行跟basepopup相关。。。

hapzhu commented 5 years ago

我也觉得很奇怪,看不到是跟程序哪里的代码相关,但确实是与basePopup有关系。我换成原生的popupwindow就没事。

//        ControlPopupWindow controlPopupWindow = new ControlPopupWindow(this.getApplicationContext());
//        controlPopupWindow.setOutSideTouchable(false);
//        controlPopupWindow.showPopupWindow(ivTitleExpand);
        PopupWindow popupWindow = new PopupWindow(LayoutInflater.from(this).inflate(R.layout.popup_window_mediacontrol,null), ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        popupWindow.setBackgroundDrawable(new ColorDrawable());
        popupWindow.setOutsideTouchable(true);
        popupWindow.showAsDropDown(ivTitleExpand);

我确定是用了basepopup这个库的

import razerdp.basepopup.BasePopupWindow;
public class ControlPopupWindow extends BasePopupWindow {}

我发现原生的popupwindow弹出来在滑动seekbar是不能点击外部非内容区域消失的,但basepopup在滑动时是可以点击外部区域消失,大佬你可以试下。

razerdp commented 5 years ago

点击外部是否消失是允许你控制的,setOutSideDismiss()

razerdp commented 5 years ago

https://github.com/razerdp/BasePopup/wiki/API#setoutsidedismissboolean-outsidedismiss

hapzhu commented 5 years ago

我在自己手机上(8.0系统)测试没有崩溃,但有一点是basepopup所特有的现象,就是当按住seekbar的滑动按钮时,再同时触碰外部区域整个弹窗会消失,即是两点同时触碰会让弹窗dismiss,可原生的popupwindow在按住seekbar时是无法点击外部区域使其消失的。我以为 popupWindow.setOutsideTouchable(false)会有作用,实际上还是会隐藏,有什么办法可以让用户在触碰内容弹窗区域时,不可点击外部区域使其dismiss吗。这里不是指设置外部不可点击setOutSideDismiss()。

razerdp commented 5 years ago

出现这个问题的原因估计在这一行代码

https://github.com/razerdp/BasePopup/blob/master/lib/src/main/java/razerdp/basepopup/PopupDecorViewProxy.java#L81

在你点击外部的时候,我会去搜索你点击的部分是否透传进而回调给basepopup的onOutSideTouch

https://github.com/razerdp/BasePopup/blob/master/lib/src/main/java/razerdp/basepopup/BasePopupWindow.java#L1833

你可以重写该方法进行你自己的操作~

关于这个问题我留意一下,因为我自己的测试并不能覆盖所有的场景,某些场景下确实可能会造成一些bug

razerdp commented 4 years ago

请更新到最新版本试试

demo测试结果如下:

ezgif-1-91730224f4f4

razerdp commented 4 years ago

无后续反馈,close

Shirwee commented 2 years ago

最新版本,在MIUI13上我也遇到了这个崩溃,setOutsideTouchable(true)和setOutSideDismiss(true),多次两根手指同时点内容和外部,就会出现这个崩溃。

razerdp commented 2 years ago

最新版本,在MIUI13上我也遇到了这个崩溃,setOutsideTouchable(true)和setOutSideDismiss(true),多次两根手指同时点内容和外部,就会出现这个崩溃。

有报错日志吗。这两个一起使用会有可能导致popup dismiss但还要分发事件给外部,进而导致NPE崩溃

Shirwee commented 2 years ago

image

Shirwee commented 2 years ago

我们的页面效果是仿照大众点评的那个评分。

Shirwee commented 2 years ago

其他机型没有问题,MIUI12也没有,升级到MIUI13就会出现。