我是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?我的意思是,要处理图形(如进度条)我应该将它们分成另一个线程吗?
答案 0 :(得分:1)
回答你的第一个问题:
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
代码在匿名类中运行,因此this
不引用从Context
派生的对象。添加MainActivity.
会使参数引用为Activity
,该Context
派生自{{1}}
你的第二个问题:这真的是正确的方式......? 这当然是一种可以接受的方式。还有其他人。
您看到的有关将活动置于最前面的消息与对话框无关。您可以在开始新的调试会话之前退出应用程序来消除它。
答案 1 :(得分:1)
AlertDialog.Builder
需要Context
。代码位于OnClickListener
匿名子类中,而不是Context
。 this
指的是子类实例。要引用父活动类的this
,其范围为MainActivity.this
,活动为Context
s。
在你的学习曲线的这一点上可以。 "警告:活动未开始,其当前任务已被带到前面"没有什么可担心的 - 应用程序已经运行,只是被带到前面,而不是重新启动。
Android没有运行AWT,并且没有该名称的EDT。但是,主线程(也称为UI线程)执行类似的操作。