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!

Podeli ovaj post preko...

Leave a Reply

Your email address will not be published. Required fields are marked *