作为我的效率怪胎(我敢肯定你们中的很多人也是如此),我已经想了一段时间了,只是想提出这个问题:

两种情况,可能是两种不同的答案。

如果我要遍历项目列表并像这样在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/

10-12 05:27