gpt4 book ai didi

java - DialogFragment 中的 onBackPressed 和 onCancel 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 07:32:33 24 4
gpt4 key购买 nike

尝试使用 dialog fragment 的后退按钮时
我很好奇使用 onBackPressed() 之间的区别(或 onBackPressedCallBack)和 onCancel() .
我试图定义back key的数据转发事件使用 onBackPressedCallback()OnBackPressedDispatcher()dialog fragment ,但它没有用。
最后,我使用 onCancel() 传递了数据.
为什么后面的键没有 onBackPressed()工作?
更新

public class WritingCommentDialogFragment extends DialogFragment {
OnBackPressedCallback callback;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


return view;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setCanceledOnTouchOutside(false);
return dialog;
}

@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
Toast.makeText(getContext(), "TEST", Toast.LENGTH_SHORT).show();
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}

}

最佳答案

onBackPressed()对话框本身会在宿主 Activity 对其进行拍摄之前拦截后退按钮的按下。默认行为是调用 cancel()在对话框上,而不是将它传递给 Activity 。这就是为什么将您的回调添加到 Activity 并没有做任何事情的原因。如果你想专门处理后退按钮的按下,你需要子类 Dialog 来覆盖它并使用该类作为你在 onCreateDialog() 中创建的 Dialog .像这样的东西:

public class MyDialogFragment extends DialogFragment {

@NotNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = new Dialog(requireContext(), getTheme()) {
@Override
public void onBackPressed() {
MyDialogFragment.this.onBackPressed();
// And maybe you also want to call cancel() here.
}
};
dialog.setCanceledOnTouchOutside(false);
return dialog;
}

private void onBackPressed() {
// your code here
}
}
对话框不仅在按下后退时被取消,而且如果用户点击对话框外或按下取消按钮(如果您在对话框中添加了一个),或者如果您手动调用 cancel() 也会取消对话框。在它或其主机 DialogFragment 上。因此,在 onCancel() 中执行您的操作涵盖更多事件,而不仅仅是按下后退按钮。
您可以挂接的第三个可能事件(使用 OnDismissListener)是对话框被关闭,这是关闭的任何时间,包括取消或屏幕旋转时。

关于java - DialogFragment 中的 onBackPressed 和 onCancel 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67877808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com