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的主要内容,如果未能解决你的问题,请参考以下文章

Android通过泛型简化findViewById类型转换

从 ListView 获取孩子会导致 android.view.View android.view.View.findViewById(int) 在空对象引用上

Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版

在Android编程中,这个语句Button mButton=(Button)findViewBYID(R.id.Button01);...

Android 实现ImageView长按显示新图片,松开恢复原图

android 创建view间关系