Szukaj…


Wprowadzenie

Wydajność aplikacji jest kluczowym elementem komfortu użytkowania. Staraj się unikać niewłaściwych wzorców, takich jak wykonywanie pracy w wątku interfejsu użytkownika i naucz się pisać szybkie i responsywne aplikacje.

Zapisz Przeglądaj odnośniki za pomocą wzorca ViewHolder

Zwłaszcza w ListView możesz napotkać problemy z wydajnością, wykonując zbyt wiele findViewById() podczas przewijania. Używając wzorca ViewHolder , możesz zapisać te wyszukiwania i poprawić swoją wydajność ListView .

Jeśli element listy zawiera pojedynczy TextView , utwórz klasę ViewHolder do przechowywania instancji:

static class ViewHolder {
    TextView myTextView;
}

Podczas tworzenia elementu listy dołącz obiekt ViewHolder do elementu listy:

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;
}

Korzystając z tego wzorca, findViewById() będzie wywoływany tylko wtedy, gdy tworzony jest nowy View , a ListView może znacznie wydajniej przetwarzać twoje widoki.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow