如何从对话框中杀死 activity 或调用 finish()?

How to kill activity or call finish() from Dialog?

我有以下代码:

public void promptUserToSaveModifications() {

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(getString(R.string.str_desea_guardar_antes_salir))
            .setPositiveButton(getString(R.string.msj_si), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {

                    dialog.dismiss();
                    if (valoresGenerales.options.op_timer_oper_edicion_ot == 1 && valoresGenerales.options.Edi_bas_ot_RegistroHoper_boton_ini_ter_trabajo == 0) {
                        promptUserToFinishCurrentJob();
                    } else if (btnMnHoraInicioRegistroHoper.getText().toString().equals(getString(R.string.str_edit_correctivo_finalizar_trabajo))){
                        promptUserToFinishCurrentJob();
                    } else if (saveModifications()) {
                        if (!postProcessSave())
                            finish();
                    }
                }
            }).show();
}
private void promptUserToFinishCurrentJob() {

    if (existsCurrentJob()) {
        exist_inicio_hoper = true;

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(getString(R.string.str_trabajos_iniciados))

                .setPositiveButton(getString(R.string.msj_si), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.dismiss();

                        toggleCurrentJob();

                        if (saveModifications()) {
                            if (!postProcessSave())
                                finish();
                        }
                    }
                }).show();
    }
}

    @Override
public void finish() {
    Intent i = new Intent();
    i.putExtra("index", getIntent().getIntExtra("index", 0));
    i.putExtra("top", getIntent().getIntExtra("top", 0));
    setResult(RESULT_OK, i);

    super.finish();
}

问题在于,如果它通过 promptUserTosaveModifications() 方法中的第二个 else if 进入 saveModifications(),它确实完成了 activity。但是,如果第一个 else if 进入 promptUserToFinishCurrentJob() 并且在这个里面进入 saveModifications(),它不会完成 activity... 你知道吗为什么以及我怎样才能完成它?

谢谢!

您需要 activity 上下文才能完成 activity。 尝试

getApplicationContext().finish(); 

this.finish();

如果您想从片段中的警告对话框中完成 activity,请使用

getActivity().finish();

始终在异步方法中使用 YourActivity.this.finish()

您正在使用对话框,即您需要先获取 activity 才能完成它。使用以下内容完成您的 activity.

getActivity().finish();