Android 使用「;findViewById“;重复或商店视图?
作为一个效率怪胎(我相信你们中的很多人也一样),我想知道这一点已经有一段时间了,我只是想提出这个问题: 两种情况,可能两种不同的答案 如果我在一个项目列表中循环,并在线性布局中更新一堆编辑文本,那么这两种方法的优缺点是什么: (一)Android 使用「;findViewById“;重复或商店视图?,android,findviewbyid,Android,Findviewbyid,作为一个效率怪胎(我相信你们中的很多人也一样),我想知道这一点已经有一段时间了,我只是想提出这个问题: 两种情况,可能两种不同的答案 如果我在一个项目列表中循环,并在线性布局中更新一堆编辑文本,那么这两种方法的优缺点是什么: (一) for(int i=0;i
for(int i=0;i
(二)
TextView电视;
对于(int i=0;i
我认为根本的问题是“findViewById”的效率有多高?这可能很挑剔,我认为2)是更好的解决方案。谢谢 毫无疑问,我认为第二种选择更好。
您不仅可以节省额外一次调用findViewById的成本(如果需要额外一个局部变量,则可以执行此操作)
但是代码的可读性也更高。毫无疑问,我认为第二个选项更好。
您不仅可以节省额外一次调用findViewById的成本(如果需要额外一个局部变量,则可以执行此操作)
但代码的可读性也要高得多。这一点也不挑剔。第二种选择无疑是更好的选择 1
for (int i = 0; i < itemList.size(); i++) {
((TextView)findViewById(itemList.get(i).getId())).setText(itemList.getText());
((TextView)findViewById(itemList.get(i).getId())).setColor(itemList.getColor());
}
for(int i=0;i
看起来很干净,但不是。如果您使用的是同一个textview,绝对不要多次调用findViewById
2
TextView tv;
for (int i = 0; i < itemList.size(); i++) {
tv = ((TextView)findViewById(itemList.get(i).getId()));
tv.setText(itemList.getText());
tv.setColor(itemList.getColor());
}
TextView电视;
对于(int i=0;i
这是更好的选择,因为它只调用findViewById一次。不过,它的可读性稍差一些
<>你也可以考虑第三个选项
for (int i = 0; i < itemList.size(); i++) {
TextView tv = ((TextView)findViewById(itemList.get(i).getId()));
tv.setText(itemList.getText());
tv.setColor(itemList.getColor());
}
for(int i=0;i
这使一切保持在循环中(更容易阅读,imo),而不会显著牺牲效率。我更喜欢第三个,但第二个也是不错的选择。这一点都不挑剔。第二种选择无疑是更好的选择 1
for (int i = 0; i < itemList.size(); i++) {
((TextView)findViewById(itemList.get(i).getId())).setText(itemList.getText());
((TextView)findViewById(itemList.get(i).getId())).setColor(itemList.getColor());
}
for(int i=0;i
看起来很干净,但不是。如果您使用的是同一个textview,绝对不要多次调用findViewById
2
TextView tv;
for (int i = 0; i < itemList.size(); i++) {
tv = ((TextView)findViewById(itemList.get(i).getId()));
tv.setText(itemList.getText());
tv.setColor(itemList.getColor());
}
TextView电视;
对于(int i=0;i
这是更好的选择,因为它只调用findViewById一次。不过,它的可读性稍差一些
<>你也可以考虑第三个选项
for (int i = 0; i < itemList.size(); i++) {
TextView tv = ((TextView)findViewById(itemList.get(i).getId()));
tv.setText(itemList.getText());
tv.setColor(itemList.getColor());
}
for(int i=0;i
这使一切保持在循环中(更容易阅读,imo),而不会显著牺牲效率。我更喜欢第三个,但第二个也是一个不错的选择。一位谷歌员工黛安娜·哈克伯恩(Dianne Hackborn)回答了一个非常类似的问题
她说,只要有可能,你就应该避免重复使用
findviewbyd
。谷歌员工黛安娜·哈克伯恩(Dianne Hackborn)回答了一个非常类似的问题
她说,你应该尽可能避免重复使用
findViewByid
。如果可能,现在就应该使用newRecyclerView
。与LinearLayoutManager
结合使用,您可以实现同样的效果,但必须使用ViewHolder
模式。
如果使用
列表视图
,还应实现视图持有者
findViewById
显然效率不高,因此您需要防止对它的调用过多。如果可能,您现在应该使用newRecyclerView
。与LinearLayoutManager
结合使用,您可以实现同样的效果,但必须使用ViewHolder
模式。
如果使用
列表视图
,还应实现视图持有者
findViewById
显然效率不高,因此您需要防止对它的调用过多。第二种方法更好,因为findViewById()的成本在静态UI布局中是可以接受的。但是,由于getView()经常被调用,因此findViewById()的使用应该保持在最小值 第二种方式更好,因为findViewById()的成本在静态UI布局中是可以接受的。但是,由于getView()经常被调用,因此findViewById()的使用应该保持在最小值 使用第二个选项保存:
-对findViewById()的调用
-调用itemList.get(i)
-对[itemList.get(i)]getId()的调用
另外,请注意,在for循环中,通常向后执行比向前执行快一点(更优化)(因为i