赶上BottomSheetDialogFragment的解雇
Posted
技术标签:
【中文标题】赶上BottomSheetDialogFragment的解雇【英文标题】:Catch dismissal of BottomSheetDialogFragment 【发布时间】:2016-07-15 09:11:39 【问题描述】:有什么方法可以捕获 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();
永远不会被触发
bottomsheet 行为的onStateChanged
仅在用户向下拖动bottomsheet 并通过折叠状态且没有dismissed/cancelled 状态时才会触发
使用 ContactDetailFragment.getDialog().setOnCancelListener()
将相同的 oncancel/ondismiss 侦听器添加到 BottomSheetDialogFragment 的实例化不会被触发
鉴于它本质上是一个对话片段,一定有什么方法可以捕捉到解雇?
【问题讨论】:
OverrideonDismiss
方法对我有用。
【参考方案1】:
找到了一个简单的解决方案。
在 BottomSheetDialogFragment 中使用 onDestroy
或 onDetach
可以让我正确地解雇
【讨论】:
覆盖onCancel()
或 onDismiss()
使用 onCancel(),它可以帮助您通过向下滑动来捕获用户取消操作
onCancel 仅在用户向下滑动时有效,如果您想在对话框关闭时收听所有情况,您可以使用 onDismiss()以上是关于赶上BottomSheetDialogFragment的解雇的主要内容,如果未能解决你的问题,请参考以下文章
赶上 ECMAScript 潮流:用现代 JavaScript 编程