如何杀死活动或从Dialog调用finish()?

时间:2018-03-09 11:47:22

标签: java android android-alertdialog activity-finish

我有以下代码:

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

问题是如果它在saveModifications()方法中通过第二个else if进入promptUserTosaveModifications(),它就会完成活动。但是,如果第一个else if进入promptUserToFinishCurrentJob()并在此内部进入saveModifications(),它就不会完成活动...你知道为什么和我怎么能完成它?

谢谢!

3 个答案:

答案 0 :(得分:3)

您需要活动上下文才能完成活动。 试试

getApplicationContext().finish(); 

this.finish();

如果您想要使用

片段中的警报对话框完成活动
getActivity().finish();

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您正在使用对话框,即您需要先完成活动才能完成。使用以下内容完成您的活动。

getActivity().finish();