Hirdetés
- Milyen okostelefont vegyek?
- Okosóra és okoskiegészítő topik
- Google Pixel topik
- Fontos frissítés érkezik a OnePlus 13-ra
- Kicsinálja az S26 Ultra a fóliagyártókat
- Honor Magic6 Pro - kör közepén számok
- Samsung Galaxy Watch4 és Watch4 Classic - próbawearzió
- Akciófigyelő: Jelentősen olcsóbban megvehető a Honor Magic8 Pro
- Nemzetközi vizekre evezett a Realme GT 7 és GT 7T
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
#39560925
#3214
üzenetére
Azért sípol, mert nem használod ki a ListView újrahasznosító mechanizmusát, hanem folyamatosan új Viewkat fújatsz fel. Feltételezem, a warning buborék két findViewById hívást takar.
A tökéletes megoldásnak két lépése van, ebből az első a kritikus.
1) Használd a convertView paramétert! Ha nem null, akkor az egy olyan cella, ami kicsúszott a képből és így nincs rá szükség. Ebben az esetben az új cella létrehozása teljesen felesleges, ezt a viewt kellene bekonfigurálnod az új adatokhoz, megspórolva a példányosítást és a GC-zést.
View rowView = convertView != null
? convertView
: LayoutInflater.from(parent.getContext()).inflate(R.layout.exc_row_layout, parent, false);2) A ViewHolder minta ehhez képest már apróság, a findViewById hívásokat lehet megspórolni vele. Egy olyan custom classról van szó, aminek tagváltozóiba elteszed a TextViewk referenciáit (tehát gyártott viewnként egyszer kell keresni), a holdert pedig beállítod Tagként a cellán. Ha a convertView nem null, akkor elkéred a tagből a holdert, és azonnal írhatod az új adatokat.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RowViewHolder viewHolder;
if (convertView == null) {
convertView = ... inflate ...;
viewHolder = new RowViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (RowViewHolder)convertView.getTag();
}
... values tömb ...
viewHolder.bindRow(values[position]);
return convertView;
}
... valahol lejjebb ...
private static class RowViewHolder {
private TextView nameView;
private TextView descView;
public RowViewHolder(View rowView) {
nameView = rowView.findViewById(...);
descView = rowView.findViewById(...);
}
public void bindRow(Exception model) {
nameView.setText(model.getName());
descView.setText(model.getDescription());
}
}
Új hozzászólás Aktív témák
- Candy: Kossuth Lajos azt üzente, elfogyott a gémergépe
- Genshin Impact (PC, PS4, Android, iOS)
- OpenMediaVault
- Tőzsde és gazdaság
- Autós topik
- Highguard - Küszöbön a megjelenés, mégsem tudunk róla szinte semmit
- AliExpress tapasztalatok
- Kormányok / autós szimulátorok topikja
- E-roller topik
- Forza sorozat (Horizon/Motorsport)
- További aktív témák...
- GYÖNYÖRŰ iPhone XR 64GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3995, 100% Akksi
- Nintendo Switch Dock Set /// Számla + Garancia
- RTX 5090-es, 5080-as stb... GAMER laptopok + dokkolók + licencek
- LG 27UL550-W - 27" IPS / 3840x2160 4K / 60Hz 5ms / HDR10 / AMD FreeSync
- Új! Razer Iskur V2 - Black gamer szék!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest


