Android从findViewById创建一个新对象与铸造一个findViewById
Posted
技术标签:
【中文标题】Android从findViewById创建一个新对象与铸造一个findViewById【英文标题】:Android create a new Object from findViewById vs casting a findViewById 【发布时间】:2016-01-06 00:15:36 【问题描述】:我尝试从 java 中的 TextView 设置文本:首先我创建了一个这样的对象:
//Property info
TextView propertyInfo = (TextView) info.findViewById(R.id.info);
propertyInfo.setText(getInfo());
//production
TextView production = (TextView) info.findViewById(R.id.production);
production.setText(getProduction());
后来我尝试了同样的事情,但这次我只是铸造它而不是创建一个新对象:
//Property info
((TextView) info.findViewById(R.id.info)).setText(getInfo());
//production
((TextView) info.findViewById(R.id.production)).setText(getProduction());
在我的测试中,我发现第二种方法在我调用它时使用的内存更少。 我知道为什么,但是我想知道这样做的正确方法是什么,或者你是如何做到的?
【问题讨论】:
【参考方案1】:这两种方法本质上是做同样的事情。
如果您需要通过设置多个属性或事件来重复使用TextView
,第一种方法最好避免多次调用findViewById
。如果您需要保留对View
的引用以便稍后以其他方法进行更新,这也是必要的。
如果您只使用一次View
,我个人更喜欢选项二,因为它更简洁。
还值得注意的是,在您的第一种方法中,您实际上并没有创建新的Object
。您只是将返回的 View
对象与您的第二种方法相同。
【讨论】:
以上是关于Android从findViewById创建一个新对象与铸造一个findViewById的主要内容,如果未能解决你的问题,请参考以下文章
从 ListView 获取孩子会导致 android.view.View android.view.View.findViewById(int) 在空对象引用上
Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版
在Android编程中,这个语句Button mButton=(Button)findViewBYID(R.id.Button01);...