• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LWEEKAndroid development
    Diskuse o vývoji aplikací pro platformu Android.
    -----------------
    Tipy, Triky, Postřehy, Začátečnický help, Nápady na nové aplikace.

    Oficiální developerská stránka: http://developer.android.com
    Něco málo v češtině na WiKi android fora: http://wiki.androidforum.cz/index.php/Programov%C3%A1n%C3%AD
    Článek na Zrojáku: http://zdrojak.root.cz/clanky/vyvoj-pro-android-ii/

    Docela zajímavé tutoriály přímo od vývojářů ze Sony Ericsson:

    na tvorbu vlastního View adapteru
    http://blogs.sonyericsson.com/developerworld/2010/05/20/android-tutorial-making-your-own-3d-list-part-1/

    zajímavý nápad na zoomování jedním prstem - aneb vytváření gest
    http://blogs.sonyericsson.com/developerworld/2010/05/18/android-one-finger-zoom-tutorial-part-1/
    rozbalit záhlaví
    GIOMIKY
    GIOMIKY --- ---
    GIOMIKY: aha tak zabralo vypnout a zapnout
    GIOMIKY
    GIOMIKY --- ---
    Ahoj, mel bych takovej lamma dotaz. Mam webView. Mam webStranku. Na webStrance mam javascript. Javascriptem se pokousim zachytit touchdown, touchmove, touchend. Ale bohuzel mi na pristroji nefunguje zachytavani techto eventu javascriptem. Je to HTML5 Canvas nejak takhle:

    canvas.addEventListener('touchend', touchend, false);

    function touchmove(ev){
    ev.preventDefault();
    var gnEndX = ev.changedTouches[0].pageX;
    var gnEndY = ev.changedTouches[0].pageY;
    ...
    }

    A webView je standardni neco na zpusob:

    mWebView = (WebView) findViewById(R.id.webViewPage);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    ... loadUrl ... atd.

    Ale jak rikam. Kdyz chci zachytit pohyb prstem po obrazovce na webView, tak se nedeje vubec
    nic. Predpokladam, ze pohyb prsty zachycuje andoroid aplikace a pokousi se je handlovat sama...
    a pritom nema zadny handler. A k tomu javascriptu se to vubec uz nedostane jako touchmove.

    Je to tak? Co s tim, aby mi stranka ve webView zacala zpracovavat touch eventy v Javascriptu?

    Predem diky za jakoukoliv radu (google jsem zkousel... rad spousty, ale asi to bude logicka chyba designu?)
    RADDINO
    RADDINO --- ---
    YAZZMAN:
    DRIZDIK: díky, nastuduji.
    DRIZDIK
    DRIZDIK --- ---
    RADDINO: Určitě bys měl persistovat někam ty data, ať už nějaká struktura v paměti na fragmentu nebo přímo DB, pokud ti appka spadne, tak budeš schopný obnovit ten stav.
    Místo linearu bych určitě použil recyclerView, kde nebudeš strojově vytvářet imageView, ale jen zavoláš datasetChanged nad adapterem a budeš moc jednoduše handlovat itemClick
    YAZZMAN
    YAZZMAN --- ---
    RADDINO: nebude jednodussi misto generovani ImageView pouzit RecyclerView? Jakoze o hodne jednodussi?
    CZERUDLA
    CZERUDLA --- ---
    RADDINO: Ahoj. Můžeš to tam "doprasit" tak, že v onActivityResult() budeš mít i obr.setOnClickListener(new OnClicklistener() {Dialog...});
    RADDINO
    RADDINO --- ---
    RADDINO: ještě ukázka těch metod
    Imageview · GitHub
    https://gist.github.com/ankhthief/fe4035ef90ecfd422a0fd9ef8b1711b5
    RADDINO
    RADDINO --- ---
    Jdu si pro radu zkušenějších. Mám fragment, kde ukládám do DB info o zranění a chci mít také možnost přiložit fotku. Nyní řeším to, že bych rád po vyfocení fotky ty fotky zobrazoval pod tlačítkem "Take photo .." a po kliknutí na ně otevřel fotku ve větším náhledu asi v Dialogu, kde by byla možnost fotku smazat. Aktuálně to mám tak, že po kliknutí na tlačítko se spustí camera Intent. Po vyfocení fotky se v OnActivityResult kódem vytvoří ImageView do definovaného LinearLayoutu a obrázek se zobrazí. Pokud vyfotím další, další obrázek se vytvoří pod to. Řeším teď, jak udělat obrázek kliknutelný, aby se po kliku otevřel Dialog, když nevím jeho ID, jelikož ty ImageView vytvářím dynamicky. Budu rád za nějaké nakopnutí, případně nasměrování, jak podobnou situaci řešit správně. Předpokládám, že moje řešení je prasárna.

    Díky moc

    JOHNY_G
    JOHNY_G --- ---
    Ještě k těm support packages. I kdybychom zapomněli na budoucí vývoj (jak psal DATEL), tak je tu slušná pravděpodobnost, že dřív nebo později narazíš na nekompatibilitu v nějaké classe, kterou Android vůbec nepodporuje, a existuje jenom v support libkách. Typicky ViewPager :-).
    DRIZDIK
    DRIZDIK --- ---
    MR_DAN: backstack je pro tebe něco jako history, s tím že jeden fragment můžeš mít v backstacku ale víckrát tak na to pozor. Současně to co dostaneš od manageru nemusí být stejná instance já tam byla předtím. Aplikace ti může umřít a znovu se probrat a backstack se mezi tím serializuje.
    DRIZDIK
    DRIZDIK --- ---
    MR_DAN: pokud neděláš něco drahého v onCreate nebo konstruktoru, tak si toho nevšimeš, jen si přidáš práci
    MR_DAN
    MR_DAN --- ---
    hmm, koukam na to, ze FragmentManager ma jakysi back stack, ktery jednak urcite budu chtit pouzivat a jednak se da pouzit i jako cache .. fragmentManager.findFragmentByTag(String)
    MR_DAN
    MR_DAN --- ---
    hmm, support baliky jako standard, zajimavy informace mi davate a dava to smysl...

    DRIZDIK: a co nejaka kombinace - cachovani instanci a zaroven ukladani jejich stavu pro pripad, ze by je system zabil a musely se vytvaret znova? byl by ten pripadnej rozdil v performance markantni? ja vlastne poradne nevim, jak draha operace je vyrvoreni fragmentu a naloadovani jeho stavu
    DRIZDIK
    DRIZDIK --- ---
    MR_DAN: Jak říká DACAN: .. rule of thumb je používat support package.
    U druhé teda vždy používám znovuvytváření fragmentů. Pamatováním si siceusnadníš práci na jedné straně, ale jen to doložíš, protože potřebuješ, aby ti appka přežila to, že jí hodíš na pozadí a obnovíš. V tu chvíli ti fragmenty i aktivita můžou stejně umřít, tak proč dělat dvě věci ... takže to co říká YAZZMAN používám jen pro FragmentPager, kde listuju horizontálně nějaký obrazovky, ale jinak určitě zapracuj na ukládání stavu. Od toho tam ten life-cycle je a použije se i jinde.
    DACAN
    DACAN --- ---
    DATEL: pouzivame vlastne jen support libky.
    DATEL
    DATEL --- ---
    Ono je teda otázka, zda vzhledem k tomu, jak Google s každou novou API verzí zavádí nové věci, starší dává jako deprecated - obecně, nejen u těch fragmentů - není lepší používat primárně ty support verze. Ono totiž support knihovny jsou aktualizované pořád, ale originální ne. Takže oprava bugů bude podle mě lepší v support knihovně. Nebo jak se na to koukáte vy ostatní?
    MR_DAN
    MR_DAN --- ---
    jo uz to mam, ta idea kdyz delam new->fragment->blank mi automaticky vytvari ty support,v4.Fragment potomky... to samy u aktivit
    MR_DAN
    MR_DAN --- ---
    YAZZMAN: hmm, koukam ze ty ne-support classy vidim jako sdk 26, protoze to je to sdk ktere aktualne pouzivam k vyvoji - da se nejak zjistit, od ktere verze API je ktera classa? je to koukam v javadocu, ale to je jak cist egyptana Sinuheta :D
    zda se, ze se to da poznat podle toho "v4" (napr) v packagi, co?
    z tohohle mam vazne peknej bordel v kodu, protoze spousta navodu na webu pouziva ty support knihovny... musim na to vic soustredit pozornost
    YAZZMAN
    YAZZMAN --- ---
    MR_DAN: support knihovny potrebujes, pokud chces pouzivat nejakou funkcionalitu, ktera byla predstavena pozdeji, na starsich verzich androidu (fragmenty jsou myslim az od API 11, takze na starsi verze potrebujes support), je to jina implementace stejne veci. Pokud nepotrebujes, support knihovny je lepsi nepouzivat

    fragmenty si s klidem drz v nejakem listu a prehazuj pomoci fragmentManageru (a mam za to, ze FragmentManager existuje uz od API 11)
    MR_DAN
    MR_DAN --- ---
    zdarek, tak ja vas zase zamestnam nejakou otazkou :-)
    android.support.v4.app.Fragment vs. android.app.Fragment - nejen tady se setkavam se zdvojenim trid, kdy jedna jde vzdycky z nejakeho compat baliku ... je nejake general rule of thumb kterou mam volit? vidim ze jedna je ze sdk 26, ale ani u jednoho mi IDE nerve, mam minSdk 21 a compileSdk 26, hadam ze to teda nebude uplne dobre?
    a rovnou druha - mam aktivitu s drawerem, pri preskakovani mezi polozkama draweru se vzdycky vytvori nova instance Fragmentu a ta se naloaduje do te aktivity - chci si ty instance pamatovat, abych je porad nevytvarel znova? nebo mam ukladat jejich stavy a instance jako takove nechat zabit? diky tomuhle jsem se dostal k tomu viz vyse, protoze takovy FragmentManager by mi s tim hodne pomohl, ale ten je z toho sdk 26
    PISKVOR
    PISKVOR --- ---
    KKTLEO: Myslíš něco jako je v Google Maps Street View?
    Kliknutím sem můžete změnit nastavení reklam