作为我的效率怪胎(我敢肯定你们中的很多人也是如此),我已经想了一段时间了,只是想提出这个问题:
两种情况,可能是两种不同的答案。
如果我要遍历项目列表并像这样在LinearLayout中更新一堆EditText,那么这两种方法的优缺点是什么:
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());
}
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());
}
我认为根本的问题是“ findViewById”的效率如何?我认为这可能有些挑剔,我认为2)是更好的解决方案。谢谢!
最佳答案
这一点都不挑剔。第二选择无疑是更好的选择。
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());
}
看起来很干净,但不是。如果您使用同一个文本视图,则绝对不要多次调用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());
}
这是更好的选择,因为它只调用一次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());
}
这将所有内容保持在循环中(更易于阅读,imo),而不会显着牺牲效率。我更喜欢第三,但第二也是一个不错的选择。
关于android - 重复使用“findViewById”还是存储 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26869490/