最近我正在研究在Android中模拟模态对话框。我进行了大量搜索,有很多讨论,但遗憾的是没有太多选项可以获得模态对话框效果。以下是一些背景信息,
对话框、模态对话框和阻塞
对话框/AlertDialog:如何在对话框弹出时“阻塞执行”(类似.NET)
没有直接的方法来获取模态行为,然后我想到了3种可能的解决方案:
1. 使用对话框主题的Activity,就像这个线程所说的那样,但我仍然无法使主Activity真正等待对话框Activity返回。 主Activity变成了停止状态,然后重新启动。
2. 构建一个工作线程,并使用线程同步。 但是,这对我的应用程序来说是巨大的重构工作,现在我有一个单独的主Activity和一个Service都在主UI线程中。
3. 在模态对话框弹出时接管事件处理,当对话框关闭时退出循环。 实际上这是在Windows中构建真正的模态对话框的方法。 我仍然没有原型化这种方式。
我仍然想用对话框主题的Activity来模拟它,
1. 使用startActivityForResult()启动对话框Activity
2. 从onActivityResult()获取结果
以下是一些源代码
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView v = new MyView(this);
setContentView(v);
}
private final int RESULT_CODE_ALERT = 1;
private boolean mAlertResult = false;
public boolean startAlertDialog() {
Intent it = new Intent(this, DialogActivity.class);
it.putExtra("AlertInfo", "This is an alert");
startActivityForResult(it, RESULT_CODE_ALERT);
// I want to wait right here
return mAlertResult;
}
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case RESULT_CODE_ALERT:
Bundle ret = data.getExtras();
mAlertResult = ret.getBoolean("AlertResult");
break;
}
}
}
调用startAlertDialog的调用者将会阻塞执行并期望返回结果。但是startAlertDialog立即返回,当DialogActivity出现时,主活动进入STOP状态。
所以问题是,如何使主活动真正等待结果?
谢谢。