xamarin - Assign/return value onClick event, return it send/receive on DependencyService -
i need assign value click event in custom dialogalert, return value and, dependency service, read in class.
this class calls dependencyservice method:
bool respuesta; if (device.os == targetplatform.ios) { respuesta = await displayalert(strings.turno_confirmartitulo, strings.turno_confirmarmensaje, strings.si, strings.btncancelar); } else { respuesta = dependencyservice.get<inttbsmensajes> ().mostrarmensaje( strings.turno_confirmartitulo, strings.turno_confirmarmensaje); } if(respuesta) {// something}
and method builds dialogalert:
public bool mostrarmensaje(string p_titulo, string p_mensaje) { objbuilder = new alertdialog.builder(forms.context, resource.style.myalertdialogtheme); objbuilder.settitle(p_titulo); objbuilder.setmessage(p_mensaje); objbuilder.seticon(resource.drawable.ic_question); objbuilder.setcancelable(false); bool respuesta = false; objdialog = objbuilder.create(); objdialog.setbutton((int)(dialogbuttontype.positive), strings.si, (sender, e) => { respuesta = true; }); objdialog.setbutton((int)dialogbuttontype.negative, strings.no, (sender, e) => { respuesta = false; }); objdialog.show(); return respuesta; }
really, don't know wrong. hope can me, please :) much
you can make modal style alert using autoresetevent
, wrapping in task
, call async style.
here how structure it:
example:
alertdialog objdialog; public async task<bool> mostrarmensaje(string p_titulo, string p_mensaje) { objdialog = new alertdialog.builder(forms.context) .settitle(p_titulo) .setmessage(p_mensaje) .setcancelable(false) .create(); bool respuesta = false; await task.run(() => { var waithandle = new autoresetevent(false); objdialog.setbutton((int)(dialogbuttontype.positive), "yes", (sender, e) => { respuesta = true; waithandle.set(); }); objdialog.setbutton((int)dialogbuttontype.negative, "no", (sender, e) => { respuesta = false; waithandle.set(); }); runonuithread(() => { objdialog.show(); }); waithandle.waitone(); }); objdialog.dispose(); return respuesta; }
usage:
var result = await dependencyservice.get<inttbsmensajes>().mostrarmensaje("stack", "overflow"); log.debug("respuesta", result.tostring());
result:
[respuesta] true
Comments
Post a Comment