AndroidGUI27:findViewById返回null的解决办法

findViewById返回空的解决方法 错误的布局文件:首先,确保你正在查找的视图对象确实存在于布局文件中,并且具有正确的 id。检查布局文件中的视图 id 是否与你在代码中使用的 id 相匹配。另外,还要确保你正在使用的是正确的布局文件,特别是在多个布局文件存在的情况下。布局文件更改未被反映:有时候,在修改布局文件后,Android Studio 可能无法正确地自动重新生成生成的代码。如果问题仍然存在,请进一步检查其他可能的原因,并查找其他开发者社区中的解决方案。该方法用于在布局文件中查找指定的视图对象,并返回对应的 View 实例。 阅读详情

在用Eclipse进行Android的界面开发,通过findViewById试图获取界面元素对象时,该方法有时候返回null,造成这种情况主要有以下两种情形。

 

第一种情形是最普通的。比如main.xml如下,其中有一个ListView,其id为lv_contactbook

<?xml version="1.0"encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <EditText android:id="@+id/et_search"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text=""

    />

 

         <ListView android:id="@+id/lv_contactbook"

                   android:layout_width="fill_parent"

                   android:layout_height="wrap_content"

         />

</LinearLayout>

如果在Activity对应的代码中,是这样的写的:

@Override

public void onCreate(BundlesavedInstanceState)

{

         super.onCreate(savedInstanceState);

         ListViewlv = (ListView)findViewById(R.id.lv_contactbook);

         setContentView(R.layout.main);

         //…

}

即在setContentView调用之前,调用了findViewById去找main布局中的界面元素lv_contactbook,那么所得到的lv一定是null。正确的做法是将上面代码中加粗的哪一行,挪至setContentView方法调用之后。

 

第二种情形。这种情况下通常是调用LayoutInflater.inflate将布局xml规定的内容转化为相应的对象。比如有rowview.xml布局文件如下(比如在自定义Adapter的时候,用作ListView中的一行的内容的布局):

<?xml version="1.0"encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="horizontal"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

> 

<TextView android:id="@+id/tv_contact_id"

              android:layout_width="0px"

              android:layout_height="0px"

              android:visibility="invisible"

              android:gravity="center_vertical"

/>

<TextView android:id="@+id/tv_contactname"

             android:layout_width="wrap_content"

             android:layout_height="36dip"

             android:textSize="16dip"

             android:layout_marginTop="10dip"

             android:textColor="#FFFFFFFF"

/>

</LinearLayout>

 

假定在自定的Adapter的getView方法中有类似如下的代码:

View rowview = (View)inflater.inflate(R.layout.rowview, parent, false);

TextView tv_contact_id =(TextView)rowview.findViewById(R.id.tv_contact_id);

TextView tv_contactname =(TextView)rowview.findViewById(R.id.tv_contactname);

 

有时候居然也会发现rowview非空,但tv_contact_id和tv_contactname都是null!仔细看代码,怎么也看不出错误来。到底是什么原因造成的呢?答案是Eclipse造成的,要解决这个问题,需要这个项目clean一次(Project菜单 -> Clean子菜单),这样就OK了。

 

第二种情况很隐蔽,因为代码的确没有错。如果一时没有想到解决办法会浪费很多时间。

android开发 findviewbyid 结果为null 的原因 findViewById 返回 null 的原因 今天运行一个之前开发的项目时,发现了这个问题。真是百思不得其解,因为之前开发的时候是好好的,而且代码没有错误。到网上查了一下,找到了原因。 主要有两种原因。 即在setContentView调用之前,调用了findViewById去找main布局中的界面元素lv_contactbook,那么所得到的结果一定是null。正确的做法是将findviewbyid,挪至setContentView方法调用之后。 第二种情形是Eclipse造成的,要解决这个问题,需要 阅读详情

相关推荐

android getActivity.findViewById获取ListView 返回NULL的方法

下面小编就为大家带来一篇android getActivity.findViewById获取ListView 返回NULL的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

findViewById返回null的问题

导致在加载视图之前使用findViewById寻找控件id!访问视图没有加载出来控件id是找不到的。最近刚接触android编程,使用listview发现程序运行崩溃闪退,发现是findViewById返回了null值。findViewById要写在setContentView后面。......

m0_60352504的博客 1170

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

Android之ListView的简单用法

Android之ListView的简单用法 Listview是我们最常用的控件之一,我也是刚刚在学习使用这个,所以写一个它的简单用法,仅仅一个创建的办法。 首先,我们在activity_main.xml中注册ListView: 使用线性布局,指定一个id,设置宽度和高度。 <LinearLayout xmlns:android="http://schemas.android.com

Younguys 644

WandB本地部署踩坑指南:从Docker启动到License更新的完整流程(附常见错误解决方案)

本文详细介绍了Weights & Biases(WandB)机器学习实验管理平台的本地化部署全流程,涵盖从Docker环境搭建、许可证管理到常见错误排查的实战经验。针对企业级应用场景,文章还提供了性能优化、高可用架构设计及开源替代方案Trackio的评估与迁移策略,为构建安全、可控的内部实验追踪平台提供完整解决方案。

potato的博客 568

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1173

findViewById(R.id.button) must not be null

只需要加入这个就解决。

qq_53122463的博客 779

深入构建加密货币价格预测系统:从数据获取到模型优化的完整指南!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1276

android 中findViewById()为null的可能原因

1.最近在写一个小app,在一个java class中,以LayoutInflater.from(context).inflate(R.layout.item, this, false);的方式去加载布局,当我准备找到布局中的某个控件时,比如imageView,假设其id为iv_pic private ImageView mIvIcon; private View mView; 在自定义的i...

weixin_39296576的博客 5109

Allegro老鸟的20年效率秘籍:用YepEda Skill脚本实现PCB设计全流程自动化

本文分享了Allegro资深工程师20年效率秘籍,通过YepEda Skill脚本实现PCB设计全流程自动化。从封装建库到规则配置,再到DFM审核,YepEda Skill大幅提升设计效率,每天节省至少4小时重复劳动。文章详细解析了自动化工具链的核心功能,并提供了实战技巧和量化对比数据。

weixin_42546392的博客 239

MT6826SGT-STD-R绝对值编码器深度解析:精准控制+灵活编程

本文详细介绍MT品牌的高性能绝对值编码器——MT6826SGT-STD-R。:区别于传统增量式编码器,绝对值输出无需掉电归零,开机即获准确位置数据。的核心优势,结合应用场景与选型指南,为工程师提供一站式解决方案参考。MT6826SGT-STD-R是一款专为工业级精密控制设计的。该设备广泛应用于伺服系统、机器人关节校准、自动化产线等领域。:15bit分辨率实现细腻的位置反馈;:通过专用编写器可自定义多项关键参数;:优化电路设计,适应复杂电磁环境。

2501_93066786的博客 679

findViewById返回null的综合解决方案

findViewById返回null的综合解决方案

Remarkable_的博客 505

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用

明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。

每日出拳老爷子的博客 557

android的findviewbyid,【已解决】Android中findViewById返回为空null

【问题】Android中如下代码:LinearLayout groupPollingAddress = (LinearLayout)findViewById(R.layout.fragment_field_list);返回为null。【解决过程】1.参考:但是没搞定。2.后来是去搜:findViewById R.layout null而最终找到并参考:去换为:LayoutInflater infl...

weixin_42465846的博客 1204

OpenOCD入门到精通:第28章 综合实战:RISC-V 调试

RISC-V调试实战摘要 本文介绍了RISC-V调试规范及其在OpenOCD中的实现。主要内容包括: RISC-V Debug规范的两个版本(0.11和0.13)及其差异,OpenOCD通过自动检测DTMCS寄存器版本号选择对应驱动实现。 RISC-V调试架构的分层设计,包含DTM、Debug Module、Program Buffer等核心组件,以及三种内存访问方式(progbuf、sysbus、abstract)。 以GD32VF103为例的实战调试配置,包括硬件连接、OpenOCD配置文件编写和GDB

从事嵌入式linux android驱动开发,拥有全栈能力 283

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

当调用findViewById报null解决办法

在findViewById时默认是在Activity的布局xml文件中寻找ID,当你想要得到另外的布局文件中控件ID时就要用View.findViewById()的方法才能找到ID。例如: LayoutInflater inflater =(LayoutInf

Cwuhao的专栏 1798

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

findViewById(R.id.xxx)返回Null

其中,R.id.textview 是layout2中的控件,当前MainActivity未引用过activity2。当执行的时候,会报以下错误 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.Char

yyyerica的博客 2363

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

findViewById 返回 null 的原因

即在setContentView调用之前,调用了findViewById去找main布局中的界面元素lv_contactbook,那么所得到的结果一定是null。第二种情形是Eclipse/android studio造成的,要解决这个问题,需要这个项目clean一次(Project菜单 -> Clean子菜单),这样就OK了。今天运行一个之前开发的项目时,发现了这个问题。真是百思不得其解,因为之前开发的时候是好好的,而且代码没有错误。到网上查了一下,找到了原因。第二种情况很隐蔽,因为代码的确没有错。

huangerbian的博客 942

自定义View通过findviewbyid返回为null解决方法

findviewbyid 返回为null,这个问题一般说明想要找的view没有在对应的layout上面。 今天遇到一个同样的问题,但是确定view已经在layout上,但是仍然返回为null。虽然最终找到了问题原因,但是过程艰辛。 具体代码如下 MainActivity.java public class MainActivity extends Activity { @Override ...

空之境界 5459

Android中findViewById返回为空null

原因: 未在所要find的view的Parent中去找。 当前的View下面,没有包含对应的想要找的view,从而导致找不到,返回null。 解决办法: 比如popupwindow中,寻找子控件,需要用在popupwindow中新建的view去调用findViewByid即可。 确认找到要找的view的parent或root的view,再在父级的view中找所需要的子view。 其中是先去找...

Rh's blog 2008

为什么findViewById会返回null

主要有两种原因。 第一种情形是最普通的。比如main.xml如下,其中有一个ListView,其id为lv_contactbook <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:lay

黑化肥发挥会挥发 5774

findViewById返回Null 错误

1.在另一个view的元素应该用baseView.findViewById()来拿 findViewById()是要指定view的,如果在该view下找不到,自然报null。平时注意养成写view.findViewById()的习惯就不容易错了。   2.findViewById在setContentView(R.layout.main);之前. 即在setContentV

yuxiaohui78的专栏 1万+

7. findViewById 返回为null (自定义控件)

一.自定义控件 findViewById返回为null首先讲一个具体的问题,这几天在做demo时,写了一个自定义组合控件,最后在run的时候显示这两行报错。原先还以为是setOnClickListener错了,后来经过debug才发现findViewById查找我的自定义组合控件为null !debug结果:接下来就开始了我痛苦的找bug过程,关于这段血泪过程,来总结一下findViewById

lemonGuo的大脑皮层、小脑、海马体、杏仁核..... 8391
上一篇: Pinyin4j的基本用法
下一篇: AndroidGUI28:在onCreate方法中两次调用setContentView
pathuang68
博客等级 码龄18年 1821粉丝 194原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值