博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主程序,然后才能运行等待对话框响应问题
阅读量:5773 次
发布时间:2019-06-18

本文共 2698 字,大约阅读时间需要 8 分钟。

      在项目开发。经常使用对话框,Android该对话框是异步,后再继续运行。

以下以使用AlterDialog对话框返回true或者false之后,主程序再继续运行为例讲述怎样实现主程序等待对话框响应后再顺序运行的方法。

思考一:

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

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

      错误例如以下: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

 

转载地址:http://ozaux.baihongyu.com/

你可能感兴趣的文章
nginx rtmp handshake过程
查看>>
ipv4
查看>>
路由能否做到ARP欺骗防御,抑制广播风暴,内网病毒防御?
查看>>
CVE-2017-1000367:Sudo本地提权漏洞
查看>>
史上最全最正确的zabbix监控tomcat的方法
查看>>
Yahoo Front-end Engineer 电面+Onsite面经
查看>>
你真的了解功能键F7吗?
查看>>
UILable字体样式修改
查看>>
浅谈Java等软件和嵌入式的区别,给你明确一个方向
查看>>
利用App漏洞获利2800多万元,企业该如何避免类似事件?
查看>>
【刘文彬】区块链 + 大数据:EOS存储
查看>>
云计算的未来市场,谁与争锋?
查看>>
cisco vpc
查看>>
mint系统下安装git
查看>>
打造livecd的过程
查看>>
可变长参数
查看>>
14Exchange Server 2010跨站点部署-发送连接器
查看>>
交换机
查看>>
javaScript中数组对象(一)
查看>>
什么是混合app开发
查看>>