Android Enregistrer les recherches avec le modèle ViewHolder


Exemple

Surtout dans ListView , vous pouvez rencontrer des problèmes de performances en faisant trop d' findViewById() pendant le défilement. En utilisant le modèle ViewHolder , vous pouvez enregistrer ces recherches et améliorer vos performances ListView .

Si votre élément de liste contient un seul objet TextView , créez une classe ViewHolder pour stocker l'instance:

static class ViewHolder {
    TextView myTextView;
}

Lors de la création de votre élément de liste, ViewHolder un objet ViewHolder à l'élément de liste:

public View getView(int position, View convertView, ViewGroup parent) {
    Item i = getItem(position);
    if(convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);

        // Create a new ViewHolder and save the TextView instance
        ViewHolder holder = new ViewHolder();
        holder.myTextView = (TextView)convertView.findViewById(R.id.my_text_view);
        convertView.setTag(holder);
    }

    // Retrieve the ViewHolder and use the TextView
    ViewHolder holder = (ViewHolder)convertView.getTag();
    holder.myTextView.setText(i.getText());
   
    return convertView;
}

Grâce à ce modèle, findViewById() sera uniquement appelé lors de la création d'une nouvelle View et le ListView pourra recycler vos vues beaucoup plus efficacement.