RecyclerView swipe to delete

Autor ovog članka je profesionalni softverski inženjer i nudi konsultantske usluge android razvoja i obuke. Više informacija ovde.

Pogledajte kod na github repozitorijumu.

Nisam mogao da smislim nikakav naslov na srpskom :/ Obično postoji povelika praznina između trenutka kad Google počne da promoviše neki patern (npr. “hamburger” meni ili “plutajuće dugme”) i trenutka kada dobijemo biblioteku koja to implementira. Svaka čast ljudima koji naprave svoje biblioteke u međuvremenu ali ja nisam ljubitelj nagomilavanja biblioteka. Te biblioteke možda imaju mnogo više funkcionalnosti i koda nego što je potrebno za ono zbog čega ih dodajete u projekat, pa time nadodaju na ukupan broj metoda projekta što može biti problem. Takođe, vreme kompajliranja i pokretanja koda će biti produženo, i morate naučiti kako da koristite još jednu biblioteku, itd.

Pre neki dan sam morao da implementiram “swipe to delete” funkcionalnost. Kažem morao zato što mi se ta ideja nije baš dopala s obzirom da neće svako znati ili pokušati da na ovaj način nešto obriše. Mislim da nije dobra ideja da neka funkcionalnost bude dostupna isključivo preko gesta, ali to je već neka druga priča. Još uvek se sećam kako je bilo poteško ovo ispravno implementirati u vreme ListView klase ali brza internet pretraga je izbacila SO pitanje sa prilično jednostavnim odgovorom, i još bez korišćenja dodatnih biblioteka! Nažalost, nije sve proteklo bez izazova.

Bilo je lako crtati nešto (u ovom slučaju crvenu pozadinu i ikonicu) dok korisnik povlači red, ali nisam bio zadovoljan izgledom nakon uklanjanja reda.
issue 1

Hteo sam samo da zadržim crvenu pozadinu dok se redovi pomeraju na svoja nova mesta ali nisam to mogao da izvedem unutar  ItemTouchHelper klase. Morao sam da ubacim dodatni ItemDecorator da bih ovo postigao. Rezultat nije izostao.

issue 1 fix

Da ne bi bilo “taknuto maknuto” rešio sam da ubacim i “poništi” opciju po uzoru na GMail aplikaciju. Posle malo “čačkanja” i to je proradilo!
undo
Međutim sve vreme sam imao čudan problem: Kada bih uklonio neki red i pomerao listu gore dole pojavili bi se “prazni” redovi. Ispostavilo se da su ti redovi i dalje bili pomereni po x osi i kada bi ponovo ušli u rotaciju! Obratite pažnju na to kako uklonim  Item 2 i nakon toga Item 1 nestane!
issue 2
Na ovo sam potrošio previše vremena, mnogo više nego na sve ostalo :/ Našao sam par hakova koji bi sredili ovo ponašanje ali to nije bio kod kojim bih bio zadovoljan u produkcijskom okruženju. Na kraju izgleda da je ovo regresioni bag u  recyclerview-v7 support biblioteci i da je ispravljen u najnovijoj verziji 3.1.1.

Toliko za ovaj put!

Parcelable vs Serializable: Istina je negde tamo

Autor ovog članka je profesionalni softverski inženjer i nudi konsultantske usluge android razvoja i obuke. Više informacija ovde.

Do skora sam isključivo koristio java serijalizaciju kao mehanizam prenosa objekata između aktivnosti. Bio sam svestan Parcelable interfejsa i navodnih prednosti koje isti nudi ali nisam imao potrebu za njim jer nikad nisam iskusio realni pad performansi usled korišćenja java serijalizacije. Dok je sa jedne strane dovoljno samo obeležiti klasu Serializable interfejsom Parcelable ipak zahteva dosta “boilerplate” koda. Kada sam se nedavno uključio na projekat koji ne koristi java serijalizaciju već Parcelable mehanizam nije mi trebalo dugo da se naviknem jer: a) ovaj pristup je navodno za red veličine brži i b) postoji super biblioteka, Parceler, koja lišava programera potrebe da piše dodatni kod i sama genereše potrebne metode.

Upravo sam implementirao prvu veću funkcionalnost kada je počela da se javlja greška za koju ranije nisam čuo – aplikacija je pucala bacajući TransactionTooLargeException (ili samo uz log E: !!! FAILED BINDER TRANSACTION !!! na pre API 15 nivou). Brza google pretraga me je uvukla u svet RPCa i transakcionih bafera, svet koga sam bio blaženo nesvestan do tad. Saznao sam da postoji nešto što se zove “binder transaction buffer”, i još da ga dele sve transakcije koje se dešavaju u istom trenutku. Istina moj kod transferuje prilično veliki graf objekata kroz intent za startovanje druge aktivnosti, što možda nije najbolja ideja, ali nemoguće da udaram u limit od 1MB?

Continue reading Parcelable vs Serializable: Istina je negde tamo

Šta sve morate da znate o Android-u pre nego što se dohvatite Photoshop-a

Autor ovog članka je profesionalni softverski inženjer i nudi konsultantske usluge android razvoja i obuke. Više informacija ovde.

Početkom novembra sam gostovao u Novom Sadu kao govornik na mesečnom okupljanju DAFED-ovaca. Za tu priliku sam pripremio pitku pričicu o tome šta sve morate da znate o Androidu pre nego se dohvatite Photoshop-a. Ako vam je zanimljivo pogledajte…