按下对话碎片时,如何关闭其包含的活动?

时间:2014-08-25 15:36:35

标签: android android-dialogfragment

我有一个启动画面Activity,显示自定义DialogFragment。当我按下时,我不仅要关闭对话碎片,还要关闭它包含活动。

DialogFragment没有onBackPressed(),否则我会把

getActivity().finish() 

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

4 个答案:

答案 0 :(得分:3)

为什么要使用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();
    }
}

答案 1 :(得分:0)

您可以尝试重写onKeyDown()来检测DialogFragment中的Back按钮:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        ....

答案 2 :(得分:0)

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;
}

}

答案 3 :(得分:0)

 python manage.py migrate cities_light  
 python manage.py manage cities_light