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は、ユーザーがボトムシートを下にドラッグして折りたたまれた状態を通過した場合にのみトリガーされ、却下/キャンセルの状態はありません
  • 同じ oncancel/ondismiss リスナーを BottomSheetDialogFragment のインスタンス化に追加しますが、トリガーされContactDetailFragment.getDialog().setOnCancelListener()ません。

本質的にダイアログの断片であることを考えると、解雇をキャッチする何らかの方法があるはずですか?

4

1 に答える 1