如何从对话框中杀死 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();
我有以下代码:
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();