按下对话框片段时,如何关闭其包含活动



我有一个显示自定义对话片段的初始屏幕活动。 当我按回去时,我不仅想关闭对话框片段,还想关闭它包含活动。

DialogFragment缺少onBackPressed((,否则我会把

getActivity().finish() 

在该回调中。 我也不想把它放在 onDetach(( 中,因为如果用户单击对话框片段中的元素,它应该在同一启动活动中填充列表视图,而不是关闭应用程序。

为什么要使用onDismiss回调?喜欢这个:

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    getActivity().finish();
}

或者覆盖活动中的onBackPressed

@Override
public void onBackPressed() {
    MyFragment myFrag = getFragmentManager().findFragmentByTag("myFrag");
    if (myFrag != null && myFrag.mDialog.isShowing())
        myFrag.mDialog.dismiss();
        finish();
    } else {
        super.onBackPressed();
    }
}
public class ShadowDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    View view = getActivity().getLayoutInflater().inflate(R.layout.shadow_loader,null);
    final Dialog dialog = new Dialog(getActivity()){
        @Override
        public void onBackPressed() {
            super.onBackPressed();
            getActivity().onBackPressed();
        }
    };
    dialog.setContentView(view);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    return dialog;
}

}

您可以尝试覆盖 onKeyDown(( 以检测 DialogFragment 中的后退按钮按下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        ....
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
       Dialog dialog = new Dialog(requireContext()){
        @Override
        public void onBackPressed() {
            super.onBackPressed();
            requireActivity().finish();
           // or requireActivity().onBackPressed();
        }
       };
    return dialog;
     }

最新更新