[android]AlertDialog和AlertDialog.Builder
2015-10-21 20:01
911 查看
上课的时候在用AlertDialog,但是发现AlertDialog竟然不能直接实例化,而必须用AlertDialog.Builder。觉得挺奇怪的,查下手册,关于该类的层次结构、说明这些反正自己看下就可以了,(原版的AlertDialog说明在安卓文件夹下的SDK下的docs/reference/android/app/AlertDialog.html,网上的博文:http://blog.csdn.net/lilu_leo/article/details/8221423),重点关注下它的三个构造函数,我们发现这个构造函数竟然是Protected的,那样我们就不能直接用来实例化了(至于为什么这么做并不是很清楚,可以自己去查下),那么该怎么办?
通过在百度查找“构造函数是Protected”,获知这种情况下应该会存在一个子类,然后该子类的构造函数就是Public的,所以继续看手册,看到最开始有提到AlertDialog有个子类AlertDialog.Builder。那么我们就可以用这个子类来进行实例化了。
在实例化过程中,Alert.Builder的构造函数有个参数是Context类型的,本来可以直接用getApplicationContext()来获取当前的Context,但是使用的时候发现APP闪退,然后如果使用[ActivityName].this(这里的[ActivityName]是指当前Activity的名字),则可以。这样就又需要去查阅this和getApplicationContext()的区别,前者和Activity关联,后者和Application关联。我们需要的是当前的Activity。但是这样写的话万一移植到其他的Activity就需要去改下这个名字,那么直接用this不就可以了。但是测试了下发现如果我的代码直接放在Activity的OnCreate里是正常的,但是当我把这些代码放到按钮的Click监听事件处理函数里的时候就提示这个this出问题了:The
constructor AlertDialog.Builder(new View.OnClickListener(){}) is undefined,也就是这个构造函数是没有定义的,因为这个this就表示当前的OnClickListener对象了而不是我们想要的Context。
那怎么办?既然this只有在OnCreate里是正确的类型,那么我们就定义一个全局的对象变量来保存这个this不就OK了。全局变量:private Context myContext;在OnCreate方法里赋值:myContext=this;然后就可以在按钮监听事件处理函数里使用了:AlertDialog.Builder myDialog=new AlertDialog.Builder(myContext);
通过在百度查找“构造函数是Protected”,获知这种情况下应该会存在一个子类,然后该子类的构造函数就是Public的,所以继续看手册,看到最开始有提到AlertDialog有个子类AlertDialog.Builder。那么我们就可以用这个子类来进行实例化了。
在实例化过程中,Alert.Builder的构造函数有个参数是Context类型的,本来可以直接用getApplicationContext()来获取当前的Context,但是使用的时候发现APP闪退,然后如果使用[ActivityName].this(这里的[ActivityName]是指当前Activity的名字),则可以。这样就又需要去查阅this和getApplicationContext()的区别,前者和Activity关联,后者和Application关联。我们需要的是当前的Activity。但是这样写的话万一移植到其他的Activity就需要去改下这个名字,那么直接用this不就可以了。但是测试了下发现如果我的代码直接放在Activity的OnCreate里是正常的,但是当我把这些代码放到按钮的Click监听事件处理函数里的时候就提示这个this出问题了:The
constructor AlertDialog.Builder(new View.OnClickListener(){}) is undefined,也就是这个构造函数是没有定义的,因为这个this就表示当前的OnClickListener对象了而不是我们想要的Context。
那怎么办?既然this只有在OnCreate里是正确的类型,那么我们就定义一个全局的对象变量来保存这个this不就OK了。全局变量:private Context myContext;在OnCreate方法里赋值:myContext=this;然后就可以在按钮监听事件处理函数里使用了:AlertDialog.Builder myDialog=new AlertDialog.Builder(myContext);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories