En esta entrada vamos a optimizar el uso de un adpatador creando una clase View Holder Pattern que evitará la llamada continua a findViewById() dentro del método getView() del Adapter.

Creamos un Custom Adapter y lo vinculamos al  ListView

Para ello procederemos con en la entrada LIstView Custom

Creamos el ViewHolder

Básicamente se trata de crear un objeto con el TextView instanciado o buscado (el TextView o cualquier objeto del layout que queramos mantener).

Creamos la clase ViewHolder dentro del adaptador, pues no servirá desde fuera. Instanciamos un ViewHolder cuando el convertView viene a nulo, es decir la primera vez, con lo que en ese momento hacemos el findViewById e instanciamos el TextView desde R. Además, para que podamos rescatar el holder cuando el convertView no venga vacío, añadimos el holder recien creado como un Tag al convertView.

Si el convertViewn no viene a nulo rescatamos el holder y dispondremos de los objetos que guardamos en el.

El código sería:

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {

        ViewHolder holder;

        if (convertView==null){
            //Inflamos el layout de nuestros items en nuestra vista v
            LayoutInflater inflater = LayoutInflater.from(this.context);
            convertView = inflater.inflate(R.layout.item_layout,null);

            holder = new ViewHolder();

            //instanciamos el ImageView y el TextView de nestro Layout pars los items.
            holder.tvNombre = convertView.findViewById(R.id.tvNombre);
            convertView.setTag(holder);
        }
        else{
            holder=(ViewHolder) convertView.getTag();
        }

        //Obtenemos el nombre de la lista según la posición que nos pasan.
        String selectedName = items.get(position);

        //En el textView si ponemos el nombre.
        holder.tvNombre.setText(selectedName);

        //Devolvemos la vista (nuestro layout) actualizada para la posición requerida.
        return convertView;
    }

    private class ViewHolder{
        private TextView tvNombre;
    }