Catch解雇BottomSheetDialogFragment

beh*_*lit 2 android android-dialogfragment bottom-sheet

有没有办法解决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()));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的东西不起作用

  • setupDialog加入任一dialog.setOnCancelListener();dialog.setOnDismissListener();从未被触发
  • onStateChanged如果用户拖动底部表格向下通过折叠状态,则仅触发底部表格行为,并且没有被解雇/取消的状态
  • 将相同的oncancel/ondismiss侦听器添加到BottomSheetDialogFragment的实例化中,通过使用ContactDetailFragment.getDialog().setOnCancelListener()不会被触发

鉴于它本质上是一个对话片段,必须有一些方法来解决这个问题?

beh*_*lit 8

找到了一个简单的解决 在BottomSheetDialogFragment中使用onDestroyonDetach允许我正确解雇

  • 覆盖`onCancel()`或`onDismiss()` (9认同)
  • 使用 onCancel() ,它可以帮助您通过向下滑动来捕获用户取消操作 (2认同)