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


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

     

  • 相关阅读:
    String、StringBuffer与StringBuilder之间区别
    Java String之String和CharSequence、StringBuilder和StringBuffer的区别(1)
    Rational Rose2007(v7.0)下载地址、安装及激活详解教程
    FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和XmlWebApplicationContext简介
    洛克菲勒
    NOIP提高组DAY1T2——信息传递(最小环)
    洛谷P2016——战略游戏(树形)
    数字转换(树上直径)
    洛谷P2014——选课(树形dp)
    没有上司的舞会(简单树形dp)
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5041680.html
Copyright © 2020-2023  润新知