Android开发中findViewById获取txt_detail_Price为空问题咨询
问题原因及解决方案
核心原因:资源ID命名不符合Android规范
Android资源命名规则明确要求,所有资源名称(包含ID、布局文件名、资源文件名等)只能使用小写字母a-z、数字0-9和下划线,不允许出现大写字母。编译工具aapt/aapt2在处理资源时,会自动将所有ID名称转换为全小写格式生成R类字段:
- XML中定义的
@+id/txt_detail_Price(首字母P大写),编译后对应的R类字段为R.id.txt_detail_price(全小写) - 代码中调用的
R.id.txt_detail_Price实际不存在,因此findViewById返回null - 另一个ID
@+id/txt_detail_pPrice可以正常工作,是因为其转成全小写后为txt_detail_pprice,和代码中引用的ID编译后实际匹配值一致
其他可能原因
- 多布局覆盖:如果项目下有多个适配不同设备的
activity_details.xml布局文件,部分布局中没有添加txt_detail_Price这个TextView,运行在对应设备时就会找不到该控件 - 构建缓存异常:Android Studio的构建缓存损坏,导致R类没有同步最新的ID定义
解决方案
- 优先修改XML中的ID命名,统一使用全小写+下划线的格式,例如将两个价格ID分别改为
@+id/txt_detail_original_price和@+id/txt_detail_current_price,彻底避免大小写混淆 - 同步修改代码中对应的R.id引用
- 执行菜单栏
Build → Clean Project再执行Build → Rebuild Project清理旧的构建缓存 - 如果存在多布局适配,检查所有
activity_details.xml文件,确保都添加了对应ID的控件
内容的提问来源于stack exchange,提问作者reza.fathi921
相关产品推荐
相关产品推荐

