学习android随手记 之 android:name android:id

简介: 学习android随手记 之 android:name android:id

android:name  android:id 这两个属性在我们编辑xml文件中常用到(不知道表达为属性准不准确)


今天博主在写代码时,遇到了 Button bt=(Button)findViewById(R.XXX.closeServ);返回的bt 一直为NULL;


刚开始也不知道是null,结果刚安装到手机,屏幕一跳直接就关了。


然后再logcat中找到null,作为一个低级的程序员就请教了度娘。


网上给出几种解答(eclipse开发环境):


1.project 勾选自动生成


2.project -》 clean


3.xml中资源名字中不能有大写(PS:我感觉挺扯淡)


4.检查R文件是不是自己工程的


5.........


--------------------------------------------------------------------


最后统统没法解决,但是错误十分奇怪,因为有一个按钮不是null,其他的都是null;


我先写一下xml的部分内容,大神看了轻喷(斜杠方向可能会错,纯手打)~

<Button 
android:id="@+id/startServ" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开启服务"
/Button>
<Button 
android:name="@+id/closeServ" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭服务"
/Button>
<Button 
android:name="@+id/c" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="多一个按钮"
/Button>


------------------------------------------------------------------------


那么在java文件中我们按照一般套路用Button start=(Button)findViewById(R.id.startServ);


         Button close=(Button)findViewById(R.id.closeServ);

Button c=(Button)findViewById(R.id.c);


结果呢。上面的程序就会编译通过,运行也没错。但是一旦注册监听器(例如:close.setXXXListener(this)),那么该行变回null对象进行操作。


那么为什么会错呢,编译都没错,套路也是这样啊,楼主真的找了一两个小时。


相信聪明的读者已经从标题中知道了答案,没错就是android:id android:name !


在上面的结果中,只有start按钮不是null,对比xml文件,start用的是android:id,其他用的是android:name.


正是这两个属性不同导致的错误。


下面,我们来仔细了解这两个属性。


------------------------------------------------------------------------------------------------------------------


android:id


下面关于android:id的内容来源于:

http://blog.163.com/android_2012/blog/static/209514187201261910219993/


不作详细转载,


简单来讲:


@+id 新增一个资源id

@id和android:id,引用现有的资源id


--------------------------------------------------------------------------------------------------------------------


android:name


引用1:

http://blog.csdn.net/aminfo/article/details/7918097


该文章中说android:name就是错误的,现在都是id。。。不多说了


引用2:


http://www.cnblogs.com/yaozhongxiao/archive/2013/10/14/3368706.html


引用3:

http://38275.blog.51cto.com/28275/707914/


以上两个引用并不在说两个属性的不同,而只是在讲android:name属性。


我们仔细可以发现,android:name属性存在于AndroidManifest.xml文件中。


------------------------------------------------------------------------------


so,不知道能不能蹩脚的总结:


android:id属性用在写Activity的布局文件中


android:name属性用在AndroidManifest.xml文件中


至于具体解释,低能的楼楼继续翻书去了,各位路过的父老乡亲们有指导意见大可留言~


Button close=(Button)findViewById(R.id.closeServ);

Button close=(Button)findViewById(R.id.closeServ);


目录
相关文章
|
3月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
2月前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
52 0
|
7月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
3月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
4月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
266 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
4月前
|
Java 开发工具 Android开发
Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息
本文介绍了在Android Studio项目中通过修改`build.gradle`脚本来自动获取并添加Git的commit ID、branch名称和用户信息到BuildConfig类中,从而实现在编译时将这些版本信息加入到APK中的方法。
84 0
|
6月前
|
Android开发
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
1419 1
|
7月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
7月前
|
Java Android开发 Dart
50家大厂面试万字精华总结android编程基础学习
50家大厂面试万字精华总结android编程基础学习
|
6月前
|
存储 API 开发工具
kotlin安卓开发,如何获取设备的唯一id, 有哪些开源库
在Kotlin的Android开发中,获取设备唯一ID的方法包括不稳定的ANDROID_ID、需要权限的IMEI、使用UUID与SharedPreference结合,以及考虑隐私的Firebase Installations ID和Advertising ID。由于隐私问题和Google Play政策,IMEI和ANDROID_ID不推荐作为长期唯一标识。推荐使用UUID(首次安装时生成并存储),或在涉及广告时使用Advertising ID(需用户同意),而Firebase Installations ID则提供了一种合规的设备标识选项。在选择方法时,必须遵守隐私指南和政策。