了解android上的AlertDialog创建

时间:2014-03-17 19:38:37

标签: android multithreading alertdialog android-dialogfragment

我是Android新手,只有三天时间大部分时间都在学习基础知识。在研究创建android警报对话框时,我最终得到了这段代码:

OnClickListener oclBtnOk = new OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
                alertDialog.setTitle("Title");
                alertDialog.setMessage("Message");
                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int which) {
                      // TODO Add your code for the button here.
                   }
                });
                alertDialog.show();            
            }
          };        

但我还有一些事要知道:

1-我第一次使用AlertDialog alertDialog = new AlertDialog.Builder(this).create();代替AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();制作代码。第一个代码不会编译,那么,究竟有什么区别呢?这意味着对话框构建器是儿子还是与MaiActivity有一些依赖关系?这意味着此对话框中的侦听器位于主要活动中?

2-这是否是创建简单警报对话框的正确方法? '因为在我的控制台中我看到一条红线说" ActivityManager:警告:活动未启动,其当前任务已被带到前面"并通过http://developer.android.com/guide/topics/ui/dialogs.html研究他们推荐的是使用AlertDialogFragment作为对话框的容器..

我的最后一个问题有点复杂,但答案很简单,因为"是"引导我,我更深入的研究会有所帮助 - 安卓有一些EDT(事件调度线程),因为它基于java?我的意思是,要处理图形(如进度条)我应该将它们分成另一个线程吗?

2 个答案:

答案 0 :(得分:1)

回答你的第一个问题:

AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

代码在匿名类中运行,因此this不引用从Context派生的对象。添加MainActivity.会使参数引用为Activity,该Context派生自{{1}}

你的第二个问题:这真的是正确的方式......? 这当然是一种可以接受的方式。还有其他人。

您看到的有关将活动置于最前面的消息与对话框无关。您可以在开始新的调试会话之前退出应用程序来消除它。

答案 1 :(得分:1)

  1. AlertDialog.Builder需要Context。代码位于OnClickListener匿名子类中,而不是Contextthis指的是子类实例。要引用父活动类的this,其范围为MainActivity.this,活动为Context s。

  2. 在你的学习曲线的这一点上可以。 "警告:活动未开始,其当前任务已被带到前面"没有什么可担心的 - 应用程序已经运行,只是被带到前面,而不是重新启动。

  3. Android没有运行AWT,并且没有该名称的EDT。但是,主线程(也称为UI线程)执行类似的操作。