BottomSheetDialogFragment

BottomSheetDialogFragment

有什么方法可以捕获BottomSheetDialogFragment 的解除/取消?

Bottom Sheet 类

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();
  • 永远不会被触发
  • Bottom Sheet 行为的 onStateChanged 仅在用户向下拖动 Bottom Sheet 通过折叠状态时触发,并且没有解除/取消状态
  • 将相同的 oncancel/ondismiss 监听器添加到 BottomSheetDialogFragment 的实例化中,通过使用 ContactDetailFragment.getDialog().setOnCancelListener() 不会触发

  • 鉴于它本质上是一个对话 fragment ,必须有某种方法来捕捉解雇?

    最佳答案

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

    关于android - catch BottomSheetDialogFragment的解雇,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36256763/

    10-09 08:28