android 弹窗等待返回值,Android的同步对话框(AlertDialog模态对话框返回值实现原理)...

最近做毕业设计,在抽象层次上需要做一些统一的可复用界面交互方法,比如对话框。具体需求是通过调用一个方法,这个方法体中生成一个对话框与用户交互,等与用户交互完毕后将用户输入的信息返回,用伪代码来体现,结构大致如下:

[mw_shl_code=java,true]public Object getXXXByDialog(){

Object result;

result = showDialog();//显示一个对话框与用户交互,并返回用户输入的信息

return result;//返回用户输入的信息

}[/mw_shl_code]

很容易理解的结果,但是实现起来很麻烦,因为遇到一个同步和异步机制的问题。

在Android中,启动一个activity,serivice,对话框等等这些组件都是采用异步的机制(通过消息循环和消息队列)。也就是在上面的代码中,执行showDialog方法显示一个对话框后,不等对话框将用户输入的信息返回,showDialog下一行的return就会马上执行。所以在上面的伪代码结构中,return返回的结果永远都是null。整个过程用图形来表示大致如下,如图:

当使用showDialog方法后,实际上就是向消息队列中发送消息,要求启动对话框。消息发送完了之后就继续执行showDialog后面的代码,对话框什么时候出现取决于对话框的消息处理的时候。因为处理的很快,所以就好像是showDialog调用后就直接显示出了对话框,但实际上showDialog后面的代码已经执行了。

解决这个问题的思路就是想办法让对话框显示,并且用户输入信息后把对话框结束了再执行return方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值