捕获 BottomSheetDialogFragment 的关闭事件

6

有没有办法捕捉 BottomSheetDialogFragment 的取消/关闭?

底部弹出框类

public class ContactDetailFragment extends BottomSheetDialogFragment
{
    private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback()
    {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState)
        {
            if (newState == BottomSheetBehavior.STATE_HIDDEN)
            {
                dismiss();
            }
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset)
        {
        }
    };

    @Override
    public void setupDialog(Dialog dialog, int style)
    {
        super.setupDialog(dialog, style);
        View contentView = View.inflate(getContext(), R.layout.fragment_contactdetail, null);

        dialog.setContentView(contentView);

        BottomSheetBehavior mBottomSheetBehavior = BottomSheetBehavior.from(((View) contentView.getParent()));
        if (mBottomSheetBehavior != null)
        {
            mBottomSheetBehavior.setBottomSheetCallback(mBottomSheetBehaviorCallback);
            mBottomSheetBehavior.setPeekHeight((int) DisplayUtils.dpToPixels(CONTACT_DETAIL_PEEK_HEIGHT, getResources().getDisplayMetrics()));
        }
    }
}
我尝试过但不起作用的方法
  • setupDialog中添加dialog.setOnCancelListener();dialog.setOnDismissListener();都无法触发
  • 底部滑动行为的onStateChanged只有在用户将底部滑动到折叠状态以下时才会触发,并且没有取消/关闭的状态
  • 通过使用ContactDetailFragment.getDialog().setOnCancelListener()将相同的oncancel/ondismiss监听器添加到BottomSheetDialogFragment的实例化中也不会触发

考虑到它本质上是一个对话框片段,肯定有一些方法可以捕获关闭事件吧?


重写 onDismiss 方法对我很有用。 - hoshi
1个回答

13

找到了一个简单的解决方案。 在 BottomSheetDialogFragment 中使用 onDestroyonDetach 可以让我正确获取关闭操作


16
重写onCancel()onDismiss()方法。 - M-Wajeeh
2
去寻找 onCancel() 方法,它可以帮助你通过下滑捕捉到用户取消操作。 - Chinthaka Devinda
1
onCancel仅在用户向下滑动时起作用,如果您想监听对话框关闭的所有情况,可以使用onDismiss()。 - Gökberk Yağcı

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接