gpt4 book ai didi

android - ViewHolder 有什么用

转载 作者:行者123 更新时间:2023-11-29 15:20:13 28 4
gpt4 key购买 nike

我正在尝试学习 Android 编程。我找不到这个算法的解释:

public View getView(int r, View convertView, ViewGroup parent) {
ViewHolder holder = null;
// Si la vue n'est pas recyclée
if(convertView == null) {
// On récupère le layout
convertView = mInflater.inflate(R.layout.item, null);

holder = new ViewHolder();
// On place les widgets de notre layout dans le holder
holder.mNom = (TextView) convertView.findViewById(R.id.nom);
holder.mNumero = (TextView) convertView.findViewById(R.id.numero);
holder.mPhoto = (ImageView) convertView.findViewById(R.id.photo);

// puis on insère le holder en tant que tag dans le layout
convertView.setTag(holder);
} else {
// Si on recycle la vue, on récupère son holder en tag
holder = (ViewHolder)convertView.getTag();
}

// Dans tous les cas, on récupère le contact téléphonique concerné
Contact c = (Contact)getItem(r);
// Si cet élément existe vraiment…
if(c != null) {
// On place dans le holder les informations sur le contact
holder.mNom.setText(c.getNom());
holder.mNumero.setText(c.getNumero());
}
return convertView;
}
  • 为什么作者要检查 convertView 是否为空?
  • 请问在这种情况下,ViewHolder 模式有何需求?

有人可以帮我理解一下吗?

提前致谢。

最佳答案

ListView 尝试回收尚未使用的“行” View 。当您向下滚动时,一些行会从屏幕顶部消失。这些 View 在可用时作为 convertView 参数传递给您的适配器,以便您可以重用它们来构建新行而不是扩充新行。因此,只有当传递下来的 convertView 为 null 时,或者换句话说,当您没有以前膨胀的 View 可以回收时,您应该始终尝试膨胀新 View 。

ViewHolder 模式试图避免在那些回收的 View 中连续调用 findViewById(这是一个昂贵的操作)。不必在每次必须生成新行时都查找所需的所有 View 引用,只需执行一次,就在它被膨胀之后,将这些引用存储在“ViewHolder”对象中,并将其存储为标签对于当前 View 。当该 View 在回收后作为 convertView 返回给您时,您知道您可以只检索之前保存的 ViewHolder 对象,并且所有引用都将在那里。无需再次寻找它们。

关于android - ViewHolder 有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19069346/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com