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

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

      在项目开发。经常使用对话框,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

 

转载于:https://www.cnblogs.com/hrhguanli/p/5041680.html

你可能感兴趣的文章
asp.net C#后台实现下载文件的几种方法(全)
查看>>
Web前端开发工程师的具备条件
查看>>
实用Android开发工具和资源精选
查看>>
TileMap
查看>>
JS属性大全
查看>>
java复制文件
查看>>
第一册:lesson seventy nine.
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>