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

Eclipse pro tip #1

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

I potpuni početnik zna da se android kod sastoji koliko od .java fajlova u, gle čuda, java programskom jeziku, toliko i od xml fajlova koji se koriste za layout, resurse i još ponešto…

Ono što zna da žestoko iritira je da kada editujete neki xml fajl i želite da pokrenete aplikaciju da bi videli da li ste sredili problem, Eclipse će se zbuniti i ponuditi vam da izaberete kako želite da pokrenete xml fajl – jedna od opcija je npr. XSL transformacija. ALI JA SAMO ŽELIM DA POKRENEM APLIKACIJU KAO I PRETHODNIH STO PUTA!

Na sreću ovo se lako da srediti.

Preferences -> Run/Debug -> Launching pa štiklirajte Always launch the previously launched appliation.

Over and out.

Android studija slučaja: placeholder sličica i memorija

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

Ove dane provodim tražeći načina da optimizujem i smanjim memorijsku potrošnju jedne android aplikacije i time, nadam se, poboljšam performanse. Ako želite da utvrdite šta zauzima memoriju u vašoj aplikaciji može vam biti od koristi Eclipse MAT alat – Memory Analizer Tool. Može se instalirati kao plugin u Eclipsu ili kao standalone aplikacija i to prilično jednostavno, a i koršćenje može biti vrlo jednostavno ali tu je i naravno mnogo naprednih opcija. O ovom alatu možda nekom drugom prilikom, a danas o slučaju koji ćemo pratiti preko ovog alata.

Continue reading Android studija slučaja: placeholder sličica i memorija

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

Dodavanje putanje na $PATH varijablu na OS X 10.8 Mountain Lion

Jedan od bitnijih razloga zašto sam počeo da pišem blog je da kad rešavam i rešim neki problem to opišem, ne samo za čitaoce bloga već i za sebe, jer pre ili kasnije ću imati taj isti problem i bilo bi glupo da ponovo pretražujem web i sklapam stackoverflow odgovore i tuđe blog postove u rešenje koje meni radi posao. Već nekolko puta sam se pomučio pokušavajući na mac-u da odradim jednostavnu stvar – dodam još jednu putanju na $PATH varijablu kako bih koristio alate na njoj iz terminala. Ljudi na netu pričaju o par načina ali prvi odgovori na koje nailazim kod mene ne rade. Da sledeći put ne bih lutao:

http://architectryan.com/2012/10/02/add-to-the-path-on-mac-os-x-mountain-lion/#.URa4eFrjkjc

Kraj :)

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