findViewById的问题和inflate(0方法

这篇博客探讨了在Android开发中如何使用findViewById和inflate方法。通过示例代码,展示了如何利用inflate加载布局并获取View,以及如何使用ViewStub进行动态加载。对话框样式的布局dialog_layout被用于演示,并设置了TextView的文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们调用的findViewById()函数其实有两种(目前我只看到两种,不确定还有没有其他的),一种是Activity类中findViewById()函数
另外一种是View类中定义的findViewById()函数
一般我们在oncreate()方法中使用的(**view)findViewById(R.id.**)既是调用的Activity中的findViewById()函数
而在其他情况写出的(**)view.findViewById()中调用的是view类中的findViewById()
综合多次经验:
一般的onCreate方法中会有setContentView(R.id.main)方法
如果有这个方法,则用findViewById方法;
如果无就用View.findViewById()方法;
setContentView就是设置一个Activity的显示界面,如果没有调用它,那么如何将layout中的布局/id拿出来用?仅仅用findViewById是不行的,因为没有“平台”,这个平台就是View。
现在,整体来看这一条语句:
Button button1 = (Button)itemView.findViewById(R.id.second);

Button button2 = (Button)findViewById(R.id.second);
可以把setContentView理解为创建一个平台,itemView理解为零时借用View这个平台。然后在这个平台上进行和layout组件中配对的操作。当然(Button)的作用就是为了在平台上找东西。


Android之Inflate()方法用途          调用findviewbyid出现 on a null object reference错误

Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能。
android上还有一个与Inflate()类似功能的方法叫findViewById(),二者有时均可使用,但也有区别
区别在于:
如果你的Activity里用到别的layout,比如对话框layout,你还要设置这个layout上的其他组件的内容,你就必须用inflate()方法先将对话框的layout找出来,然后再用findViewById()找到它上面的其它组件。例如:
[html] view plain copy
  1. View view1=View.inflate(this,R.layout.dialog_layout,null);  
  2.     
  3.   TextViewdialogTV=(TextView)view1.findViewById(R.id.dialog_tv);  
  4.     
  5.   dialogTV.setText("abcd");  
注:R.id.dialog_tv是在对话框layout上的组件,而这时若直接用this.findViewById(R.id.dialog_tv)肯定会报错。

[html] view plain copy
  1. View viewStub = ((ViewStub) findViewById(R.id.stubView)).inflate();  

Inflate()或可理解为“隐性膨胀”,隐性摆放在view里,inflate()前只是获得控件,但没有大小没有在View里占据空间,inflate()后有一定大小,只是出于隐藏状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值