Új hozzászólás Aktív témák
-
WonderCSabo
félisten
válasz
#39560925
#3214
üzenetére
Bocs, nem ismerem a use-caset, igazad van, nem kéne így tanácsot adnom ezzel kapcsolatban.
Két dolgot tehetsz:
* custom Preference osztály, amiben megírod, hogy benne legyen a Facebook button, majd a preferences.xml fájlba berakod
* nem rakod be az xml-be, hanem addPreferencesFromResorce hívása után kódban hozzáadod a VIew-t.Az első megoldás sztem sokkal szebb.
-
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
- VR topik
- Windows 11: miért nem vált mindenki?
- Milyen HASZNÁLT notebookot vegyek?
- iPhone topik
- Kormányok / autós szimulátorok topikja
- Samsung Galaxy S26 - szeret, nem szeret
- LEGO klub
- Apple iPhone 13 - hízott, de jól áll neki!
- Futás, futópályák
- Fizess az Instagram sztorik anonim megnézéséért!
- További aktív témák...
- DDR3 PC ram, mennyiségi kedvezmény!
- HP EliteDesk 800 G2 SFF, i3-6100,8GB DDR4,256GB SSD, DVD, WIN11
- DDR3L laptop ram, mennyiségi kedvezmény!
- Hp EliteBook 835 G8 (AMD Ryzen 5 PRO 5650U 6 mag 12 szál, 13" FullHD) több darab akár 24.990Ft
- Bomba ár! Lenovo ThinkPad P15s G2 - i7-11G I 16GB I 512SSD I Nvidia 4GB I 4K I Cam I W11 I Gari!
- HP EliteOne 800 G4 All-in-One i5-8500 16GB 512GB 23.8" Érintőkijelző!! 1 év garancia
- LG 65M4 - 65" Wireless OLED evo - 4K 144Hz - MLA Plus - 3000 Nits - NVIDIA G-Sync - FreeSync
- Honor Magic5 Lite / 6/128GB / Kártyafüggetlen / 12Hó Garancia
- Razer Cobra Lightweight Minecraft Edition RGB Gaming Egér!
- Dell Precision 5520 15,6" FHD, Xeon E3-1505M v6, 16GB RAM, Quadro 4GB VGA, SSD, jó akku, számla, gar
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

