Closed bwmgd closed 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) 显示为一个细条
请仔细阅读 wiki,DialogX 不支持在 dismiss 后重新 show,这种使用方法是错误的。 dismiss 意味着将对对话框进行销毁,建议在每次需要使用时创建实例而不要重复使用同一个实例,如果你只是想隐藏实例后重新显示,请参阅 《常见问题-如何复用一个对话框?》
另外,关于 baseView 的位置,是通过 view.getLocationOnScreen
系统方法获取的,理论是会返回一个 view 基于屏幕上的坐标位置,尚不清楚未获取到位置的具体原因。最新版本已经改为了跟随刷新的方式,这意味着将实时获取 baseView 的位置并刷新菜单进行跟随,理论上非常可靠了。
好的十分感谢
已经使用dialog.hideWithExitAnim() 拦截, 再次show() 的时候popupmenu 没有显示, 但是点击时会响应点击事件, 并且再次点击背景区域log可以打出onBackgroundMaskClickListener, 也就是存在弹窗但没有显示在界面上 DialogFragment 模式仍然会报错 Window 模式则会再也无法显示 此外Demo 中的上下文菜单中的基础菜单点击添加后产品A是无法点击的
此问题将在下一个版本解决,测试代码运行已通过
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;
}
});
请更新至版本 0.0.48.beta12,详细更新日志:https://github.com/kongzue/DialogX/releases/tag/0.0.48.beta12
长时间未收到答复暂时关闭此问题,若有疑问请继续回复。
BUG 反馈
问题描述:
如题,怀疑由于使用navigation的单activity应用view错误依附? MessageDialog正常显示消失
设备信息:
Android10
是否在 Demo 中能复现此问题?
未尝试
问题截图/视频