主程序等待对话框响应后再顺序执行问题

在项目开发中,经常会用到对话框,Android的对话框都是异步进行的,但是有时候需要实现主程序等待对话框响应后再继续执行。下面以使用AlterDialog对话框返回true或者false之后,主程序再继续运行为例讲述如何实现主程序等待对话框响应后再顺序执行的方法。

思考一:

首先考虑到声明一个final 关键字的布尔型的局部变量,然后在对话框的“确认”和“取消”按钮的点击事件中对布尔型变量进行赋值,然后再执行主程序。

问题一:在代码的过程对布尔型变量进行赋值的时候提示错误。

错误如下:The final local variable xxx cannot be assigned, since it is defined in an enclosing type 其中xxx是一个局部变量名,首先这是一个java编译时的错误,翻译成中文是:不可变的局部变量不能被赋值,因为它已经被定义在一个封闭类型中。

解决办法:将xxx 作一下封装,用集合或者数组,如果xxx是基本数据类型一般用数组。

如:xxx为 String类型的话,可以封装成 String[] xxx=null;然后在接下来用到 xxx 变量的地方, 将xxx 写成 xxx[0];xxx 如果为对象的话,那么可以用集合 将xxx进行封装。

问题二:对话框是异步的,也就是说在等待对话框执行的过程中,主程序也在运行。

其实可以使用全局变量,只是在调用对话框之后不能写需要对话框返回值有关的代码,然后等对话框响应之后,在主程序中再设置一个触发,然后继续执行主程序,这样是可行,但是有时候不符合用户的习惯。

因为问题二的存在思考一的方法不能实现。

思考二: 给AlterDialog创建监听器。

下面代码在调用对话框之后同样也不能写需要对话框返回值有关的代码,但是对话框响应之后不需要再设置触发,其实本质上来说也就是用设置监听器的方法在主程序中设置一个触发,其实针对思考一中的问题二的一种解决方法。

代码如下:

1. MyInterface.java

public class MyInterface {

    DialogReturn dialogReturn;

    public interface DialogReturn {

        void onDialogCompleted(boolean answer);
    }

    public void setListener(DialogReturn dialogReturn) {
        this.dialogReturn = dialogReturn;
    }

    public DialogReturn getListener() {
        return dialogReturn;

    }
}

2.Main.java

public class Main extends Activity implements MyInterface.DialogReturn{

    MyInterface myInterface;
    MyInterface.DialogReturn dialogReturn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                ....
        myInterface = new MyInterface();
        myInterface.setListener(this);
    }

   public void Confirm(Context context) {
        AlertDialog dialog = new AlertDialog.Builder(context).create();
        dialog.setTitle("Confirmation");
        dialog.setMessage("Choose Yes or No");
        dialog.setCancelable(false);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", 
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int buttonId) {
                myInterface.getListener().onDialogCompleted(true);
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No",
             new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int buttonId) {
                myInterface.getListener().onDialogCompleted(false);
            }
        });
        dialog.setIcon(android.R.drawable.ic_dialog_alert);
        dialog.show();
         }

    @Override
    public void onDialogCompleted(boolean answer) {
        Toast.makeText(Main.this, answer+"", Toast.LENGTH_LONG).show();
            if(answer)
            // do something
            else
            // do something
    }
}

上述代码可以对比控件添加监听器来理解。

参考网址:http://ask.csdn.net/questions/464

时间: 2024-08-01 16:28:38

主程序等待对话框响应后再顺序执行问题的相关文章

主程序,然后才能运行等待对话框响应问题

在项目开发.经常使用对话框,Android该对话框是异步,后再继续运行. 以下以使用AlterDialog对话框返回true或者false之后,主程序再继续运行为例讲述怎样实现主程序等待对话框响应后再顺序运行的方法. 思考一: 首先考虑到声明一个final keyword的布尔型的局部变量,然后在对话框的"确认"和"取消"button的点击事件中对布尔型变量进行赋值.然后再运行主程序. 问题一:在代码的过程对布尔型变量进行赋值的时候提示错误. 错误例如以下:The 

JS如何实现文档加载完成后再去执行代码

JS如何实现文档加载完成后再去执行代码:在执行某些操作的时候,需要当文档完全加载完成之后再去执行,否则可能出现意向不到的情况,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title&g

iOS 怎么在一个函数执行完毕得到某个参数值后再去执行他下边的代码

最近项目中牵扯OC与H5交互, 其中有一个问题是H5加载相册的照片,方法大体是: 和后台制定好协议, 在请求中拦截这个协议, 之后传递一个相对地址给H5来加载本地图片. 交互时, H5调用OC注册的方法, 回调OC传递过来的照片的相对地址以便加载手机照片. 这里出现问题了, 要做到H5同步加载手机的图片,并不容易, 因为调用OC注册的方法时, 就要接着返回图片的相对地址, 来不及等用户操作, 就要返回地址. 所以要想办法执行完用户的操作, 得到相对路径之后再传递给H5, 这里就要先执行完用户的选

JS,JQ实现暂停FOR循环,间隔几秒后再继续执行

<!DOCTYPE html><head><script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>function testing(){  var string = '1u2,1u3,1u4,1u5';     var count = 0;     for (var i = 0; i < string.le

C# 多线程join的用法,等待多个子线程结束后再执行主线程

等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = new Thread[2]; ths[0] = new Thread(Method1); ths[1] = new Thread(Method2); foreach (Thread item in ths) { //首先让所有线程都启动 item.Start(); //试想一下在这里加上item.

C# 本进程执行完毕后再执行下一线程

最近做了一套MES集成系统,由上料到成品使自动化运行,其中生产过程是逐步的,但是每一个动作都需要独立的线程进行数据监听,那么就需要实现线程等待. 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Thre

Jquery ajax加载等待执行结束再继续执行下面代码操作

Jquery等待ajax执行完毕再继续执行下面代码的效果,具体代码如下,其实就是将 jquery ajax 函数的 async 参数设置为 false 即可,该参数默认为 true: $(document).ready(function(){ loadphpernote(); window.open('http://www.phpernote.com'); }); function loadphpernote(){ var url='http://www.phpernote.com/ajax.p

main函数执行前、后再执行的代码

一.main结束 不代表整个进程结束  (1)全局对象的构造函数会在main 函数之前执行,          全局对象的析构函数会在main函数之后执行:          用atexit注册的函数也会在main之后执行.  (2)一些全局变量.全局对象和静态变量.对象的空间分配和赋初值就是在执行main函数之前,而main函数执行完后,还要去执行一些诸如释放空间.释放资源使用权等操作  (3)进程启动后,要执行一些初始化代码(如设置环境变量等),然后跳转到main执行.全局对象的构造也在ma

用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat

摘自:https://zhidao.baidu.com/question/492732911.html @echo off start d:\1.bat start c:\2.bat 这样是2个任务同时执行,应该怎么改,谢谢 1 2 3 4 5 6 7 8 9 @echo off start /wait d:\1.bat start /wait c:\2.bat   @echo off call d:\1.bat call c:\2.bat start 是在新窗口运行调用的文件,call是在当前