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

Android dizajn za početnike: Uvod

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

Mislim da mi se još ni jednom nije desilo da na projektu sarađujem sa dizajnerom koji je imao prethodnog iskustva u dizajniranju aplikacija za android. Štaviše, neretko projekat nije ni imao dizajnera jer se kod nas dizajn percipira kao nešto usputno, nešto što ističe vrednost a ne stvara je, pa će biti dodato na kraju kao šlag na tortu (kao da je to moguće…) i to pod uslovom da bude dovoljno resursa. Kad čovek reši da uštedi i sam napravi dizajn, rezultat izgleda otprilike kao ovaj moj sajt :) Elem, da se vratim na temu: ovu seriju članaka sam zamislio kao početno uputstvo nekim sledećim dizajnerima sa kojima ću sarađivati.

Continue reading Android dizajn za početnike: Uvod

Konverzija android aplikacije u biblioteku

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

Prebacujete android aplikaciju u android biblioteku? Sama promena je vrlo jednostavna, Properties->Android,  štiklirate Is Library i voila. Makar je tako u teoriji a evo par saveta koji će pomoći da sve prođe glatko i u praksi…

Continue reading Konverzija android aplikacije u biblioteku

SMS Obaveštenja v1.11

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

Google Developer konzola dozvoljava svega 500 karaktera u “What’s new” polje što nije dovoljno za ovo osveženje vaše omiljene aplikacije – SMS Obaveštenja pa sam zbog toga rešio da napišem ovaj post i linkujem ga sa Google Play Store-a za malo širu priču šta je sve novo.

Continue reading SMS Obaveštenja v1.11

Kako pokrenuti Google Maps Android API v2 na emulatoru

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

UPDATE: ipak je proradilo, pogledaj dodatak blog postu na kraju!

Nikako. Lepo kaže čovek sa insajderskim informacijama ovde na stackoverflow.com Al’ sam ja imao ideju kako bi možda ipak moglo. To me je koštalo 3h života i ne znam kolko živaca, i sad sam u tom prostoru između nemoći i besa, prostoru dobro poznatom svakom android developeru :) Ipak, nešto sam i naučio u procesu – kako da instaliram funkcionalan Google Play Store na emulator.

Continue reading Kako pokrenuti Google Maps Android API v2 na emulatoru

SMS Obaveštenja – revisited

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

Pre nešto više od godinu dana sam objavio svoju prvu android aplikaciju – SMS Obaveštenja. Sa jedne strane sam jako zadovoljan, ocene su zaista izvanredne sa prosekom od 4.9 od 120 ocena trenutno. Sa druge strane ima i problema, ljudi mi se javljaju mejlovima o situacijama kada aplikacija ne radi, posebno na novijim verzijama androida što uopšte nije čudo kad se uzmu u obzir tektonske promene od i dalje preovlađujuće verzije 2.3.X preko nesretno izbrzanog 3.0 do najnovijih telefona na tek izašloj verziji 4.2.

Definitivno je vreme za novu verziju, a pošto sam od skora samostalni preduzetnik i freelancer sigurno će se naći i slobodnog vremena u pauzama između projekata :)

Continue reading SMS Obaveštenja – revisited