kongzue / DialogX

💬 DialogX dialog box component library, easy to use, more customizable, more scalable, easy to achieve a variety of dialog boxes. DialogX对话框组件库,更加方便易用,可自定义程度更高,扩展性更强,轻松实现各种对话框、菜单和提示效果,更有Material You、iOS、MIUI等主题扩展可选
Apache License 2.0
2.08k stars 217 forks source link

【BUG反馈】PopMenu 点击空白区域dismiss后再show就不显示了 #272

Closed bwmgd closed 1 year ago

bwmgd commented 1 year ago

BUG 反馈

问题描述:

如题,怀疑由于使用navigation的单activity应用view错误依附? MessageDialog正常显示消失

设备信息:

Android10

是否在 Demo 中能复现此问题?

未尝试

问题截图/视频

image

bwmgd commented 1 year ago

并且使用Window 模式和DialogFragment 模式都尝试过, 但是会定位到界面左上角而不是铆钉的View,同时DialogFragment 模式会报错

         FATAL EXCEPTION: main
                 Process: com.boe.itc.pms, PID: 31737
                 java.lang.IllegalStateException: DialogFragment can not be attached to a container view
                    at androidx.fragment.app.DialogFragment$4.onChanged(DialogFragment.java:151)
                    at androidx.fragment.app.DialogFragment$4.onChanged(DialogFragment.java:144)
                    at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
                    at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
                    at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
                    at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
                    at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3115)
                    at androidx.fragment.app.DialogFragment.performCreateView(DialogFragment.java:510)
                    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
                    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
                    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1899)
                    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1817)
                    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1760)
                    at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:547)
                    at android.os.Handler.handleCallback(Handler.java:883)
                    at android.os.Handler.dispatchMessage(Handler.java:100)
                    at android.os.Looper.loop(Looper.java:214)
                    at android.app.ActivityThread.main(ActivityThread.java:7650)
                    at java.lang.reflect.Method.invoke(Native Method)
                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:503)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

并且还有一个问题: 在没有设定宽度的情况下, 不会自适应宽度(Warp Content) 显示为一个细条

kongzue commented 1 year ago

请仔细阅读 wiki,DialogX 不支持在 dismiss 后重新 show,这种使用方法是错误的。 dismiss 意味着将对对话框进行销毁,建议在每次需要使用时创建实例而不要重复使用同一个实例,如果你只是想隐藏实例后重新显示,请参阅 《常见问题-如何复用一个对话框?》

kongzue commented 1 year ago

另外,关于 baseView 的位置,是通过 view.getLocationOnScreen 系统方法获取的,理论是会返回一个 view 基于屏幕上的坐标位置,尚不清楚未获取到位置的具体原因。最新版本已经改为了跟随刷新的方式,这意味着将实时获取 baseView 的位置并刷新菜单进行跟随,理论上非常可靠了。

bwmgd commented 1 year ago

好的十分感谢

bwmgd commented 1 year ago

已经使用dialog.hideWithExitAnim() 拦截, 再次show() 的时候popupmenu 没有显示, 但是点击时会响应点击事件, 并且再次点击背景区域log可以打出onBackgroundMaskClickListener, 也就是存在弹窗但没有显示在界面上 DialogFragment 模式仍然会报错 Window 模式则会再也无法显示 此外Demo 中的上下文菜单中的基础菜单点击添加后产品A是无法点击的

kongzue commented 1 year ago

此问题将在下一个版本解决,测试代码运行已通过

PopMenu popMenu;

if (popMenu != null && popMenu.isShow()) {
    popMenu.show();
    return;
}
popMenu = PopMenu.show(view, new String[]{"选项1", "选项2", "选项3"})
        .setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
            @Override
            public boolean onClick(PopMenu dialog, CharSequence text, int index) {
                dialog.hideWithExitAnim();
                return true;
            }
        })
        .setOnBackgroundMaskClickListener(new OnBackgroundMaskClickListener<PopMenu>() {
            @Override
            public boolean onClick(PopMenu dialog, View v) {
                dialog.hideWithExitAnim();
                return true;
            }
        });
kongzue commented 1 year ago

请更新至版本 0.0.48.beta12,详细更新日志:https://github.com/kongzue/DialogX/releases/tag/0.0.48.beta12

kongzue commented 1 year ago

长时间未收到答复暂时关闭此问题,若有疑问请继续回复。