34 komentářů k článku Vyvíjíme pro Android: Fragmenty a SQLite databáze:

  1. j3nda

    me by zajimala grafika

    ahoj,
    me by zajimal vyvoj graficky ladenych aplikaci jako napr:
    (pixely, pozicovani, fadeIn/Out, …, prip. JOGL/OpenGL)
    – mapy ~ opengl 2d/3d
    – hry ~ opengl 2d/3d

    1. Rado2

      Re: me by zajimala grafika

      ja som si myslel, že sa za chvíľu naučím OpenGL ES pre android, ale keď som zistil aké zložité je vykresliť obyčajný trojuholník, tak som pochopil, že bez nejakého enginu to vôbec nemá zmysel, teda pokiaľ človeka nebavia napĺňanie a konverzie bufferov a písanie si vlastných algoritmov na všetko, vrátane najjednoduhšieho osvetlenia, atď.

      1. j3nda

        Re: me by zajimala grafika

        no pro opengl je frameworku nekolik (alespon co si z dob c++ pamatuju – nevim jak je na tom android. v jave jsem objevil JOGL). a predpokladam, ze se i neco na 3d najde nekde na sourceforge anebo freshmeatu.

    2. Matěj Konečný

      Re: me by zajimala grafika

      Předně se omlouvám, že píšu nepřihlášen – přihlášenému mi to Zdroják vůbec nedovolí.

      Pokud se budeme věnovat grafice, bude to maximálně na úrovni „Získej Canvas, ten má tyhle kreslící metody:” S OpenGL jsem jednak vůbec nikdy nedělal, takže rozhodně nejsem ten správný na to, abych o něm psal, jednak by vysvětlování OpenGL na Androidu bylo na další seriál. Stejně tak se nebudeme věnovat RenderScriptu.

      Obecně je tento seriál mířen spíše na základy vývoje pro Android, čímž mám na mysli to, že neplánuju probírat věci, které skoro nikdo nikdy nepoužije, nikoliv, že by se vůbec neprobíralo do hloubky.

  2. https://double.mojeid.cz/#d7Ac2Rzshw

    komunikace se serverem

    Díky za super články, konečně někdo, kdo neskončil u nastavení vývojového prostředí :o)

    Určitě bych uvítal možnosti komunikace se serverem a především push notifikace

    1. Matěj Konečný

      Re: komunikace se serverem

      Ahoj,

      komunikace se serverem bude minimálně po úroveň toho, jak správně na Androidu vytvářet asynchronní požadavky tak, abychom neblokovali UI vlákno.

      Push notifikace mi přijdou jako ne až tak důležitá vlastnost, takže s nimi v tuhle chvíli do seriálu nepočítám. Pokud bude dostatečný zájem, může to někdy vyjít jako samostatný článek tady na Zdrojáku nebo u mě na blogu (až založím :D – pracuju na tom).

      Co sis Ty všechno představoval pod pojmem komunikace se serverem? Budu moc rád za inspiraci :).

      1. https://double.mojeid.cz/#d7Ac2Rzshw

        Re: komunikace se serverem

        Ahoj,

        koukám, že na mailové notifikace se tady spolehnout nemůžu.

        Ideální představa je samozřejmě vzdálené napojení databáze (mssql, mysql), ale vzhledem k tomu, že jsem žádnou rozumnou knihovnu nenašel, je to asi trošku moc.
        Možná, pokud máš v rukávu nějaké hezké řešení pomocí api nad databází- s tím, že by se mohl článek víc věnovat bezpečnosti. Přece jen, většina tutorialů posílá plain text atd. – těžky říct, zda to už není příliš za rozsahem serialu

        1. Matěj KonečnýAutor příspěvku

          Re: komunikace se serverem

          Ahoj,

          tohle je určitě mimo rozsah článku.

          Kromě toho jsem to jednak nikdy nedělal, jednak (ale to je jen můj názor) se mi takovýhle přístup nelíbí a přijde mi jako nepatřičný. Myslím, že (už v rámci zjednodušení portu na jiné systémy) by, jsou-li ukládána někde v cloudu, měla data být přístupná přes nějaké API. Připojení remote database se mi nelíbí.

  3. rogisoft

    Problém s EditText v API 16

    Zdravím!
    Předně díky za super seriál. S androidem začínám (jinak 20-letá praxe programování pro platformy MS v Delphi), nainstaloval jsem si Eclipse, Android SDK 4.1 (API 16) a postupuji podle tohoto seriálu.
    Všechny příklady dělám pod verzí 4.1 a nakonec i fungují. :-)
    Když však přidám do View EditText, jedno jestli přes XML nebo vizuálně myší, tak mi vyběhne chyba:

    java.util.Lin­kedHashMap.el­dest()Ljava/u­til/Map$Entry;
    Exception details are logged in Window > Show View > Error Log

    Když Layout přepnu na API 15, tak chyba zmizí a aplikace je OK. Všechny Layouty, kde je EditText, mám tak v nižší verzi API 15 ostatní v API 16.
    Faktem je, že aplikace nakonec v AVD běží normálně bez problémů.
    Nevíte někdo v čem je problém? Díky

    Ještě jeden dotaz. Jak si správně vytvořit AVD emulující tablet? Použil jsem API 16 a skin VXGA800-7in. Při pokusu o start mi AVD zatuhne a musím ho ukončit hlašením Windows (mám Win7).
    Taky předem díky za odpověď.

    1. Matěj Konečný

      Re: Problém s EditText v API 16

      Ahoj,
      kde je problém, opravdu nevím. Zkoušel jsem použít EditText na Jelly Bean, ale problém se mi žádný neobjevil. Můžeš prosím ukázat, jaký kód Ti působí problémy? Co se AVD emulujícího tablet týče, zkus nastavit rozlišení tak, aby bylo širší než vyšší. A zároveň dostatečně velké.

  4. phoose

    soubory

    Ahoj, po dlouhé době mám konečně čas se zase vrátit k tomuto seriálu. Obsahuje spousty užitečných informací a jednotlivé postupy jsou pěkně vysvětlené. Mám ale s tímto dílem jeden drobný problém. Stáhl jsem si ukázkový zdrojový kód, abych si napřed vyzkoušel, jak se aplikace bude ve výsledku chovat. Ten jsem normálně spustil a fungoval. Pak jsem tedy začal celý program psát podle článku, abych se zase něčemu novému přiučil. Tady jsem ale narazil na problém. Kdykoliv se v článku vyskytuje nějaký zdrojový kód (nebo výpis XML atd.), bylo by možné třeba pod tento výpis uvést, do jakého souboru tento kód patří? Začal jsem být zmatený hned v odstavci s nadpisem NotesListFragment. Je tam XML výpis layoutu, ale nikde jsem nenašel, jak se soubor s tímto layoutem má jmenovat. Vzhledem k tomu, že se z jeho názvu vytváří jeho ID v programu, jedná se podle mě o dost podstatnou informaci. Ono ten název souboru možná jde vypátrat ze zdrojových kódů, ale je to zdlouhavé a pokud je tam layoutů víc, tak už to není tak snadné. Bylo by tedy možné výpisy kódů doplnit o název souboru, ze kterých jsou? Díky :-)

    1. Matěj KonečnýAutor příspěvku

      Re: soubory

      Ahoj,

      děkuju za pochvalu. Názvy souborů jsem přestal dávat záměrně. U Activit je to poměrně jasné, tam se soubor jmenuje stejně jako jím obsažená třída. O tom, jak se generují názvy layoutových souborů jsme hodně psali ve článku Suroviny, Intenty a jednotky.

      Takže se stačí podívat na to, jaké identifikátory začínající na R.layout v příslušné activity používáme. Druhá možnost, a já myslím, že nejlepší, je vykašlat se na to, co píšu já, a pojmenovat si je tak, jak se líbí Tobě. To Tě donutí pořádně pochopit, kde se v kódu identifikátory těch layoutů používají a proč. A to si myslím, že je docela dobře.

      Já ty názvy souborů koneckonců přestal psát záměrně, právě z tohoto důvodu (a taky mi to ulehčilo práci :o)).

      1. phoose

        Re: soubory

        Chápu, u těch tříd to je docela zbytečné, tam je to docela jasné co kam patří. Ale třeba u těch layoutů by se to docela hodilo, protože zrovna v tomto díle je jich docela dost, a proto jsem se v nich pomalu přestal orientovat. Občas ne všemu napoprvé úplně rozumím a v takovém případě jen slepě opíšu kousek kódu s tím, že ho pochopím později, až když ho mám napsaný. A když z kódu třeba nepoznám, že zrovna tento layout je R.layout.neco, tak mi to pak nebude fungovat jak má :-)
        Případně mě napadá ještě jiný způsob. Napřed dát do textu výpis kódu, kde se s daným layoutem pracuje a až pak vypsat ten layout. V takovém případě by bylo jasné, že layout zrovna s tímto jménem se bude vytvářet a nebude potřeba v článku přeskakovat nahoru a dolů a hledat ty správné názvy :-)

        1. Matěj KonečnýAutor příspěvku

          Re: soubory

          Já dávám nejdřív layouty proto, že ony jsou na kódu nezávislé, zatímco kód s nimi pracuje. Pokusím se ale něco vymyslet :). Děkuju za názor a zpětnou vazbu, moc si toho vážím a moc mi aždá zpětná vazba pomůže.

  5. KiN

    SQLite

    Dobrý den,

    v článku (mimochodem, děkuji za celou sérii) uvádíte, ze SQLite je implementována v Android OS. Pokud tedy vyvíjím na Windows XP, předpokládám, že je součástí AVD. … Při pokusu o běh této aplikace na AVD se mi při stisku tlačítka „Přidat poznámku“ objevil FATAL ERROR, tak hledám, co by mohlo být toho příčinou a existenci SQLite tímto pokládám za vyřešenou.

    Děkuji předem za potvrzení či vyvrácení mého předpokladu.

    S pozdravem, KiN

    1. Matěj KonečnýAutor příspěvku

      Re: SQLite

      Dobrý den,
      mělo by to tak být. Pokud vám nejde spustit ukázkové řešení, můžete sem, prosím, zkopírovat celý text výjimky? Podívám se na to.

      1. KiN

        Re: SQLite

        Dobrý den,

        děkuji za brzkou odpověď. … Chybu jsem už našel, resp. bylo jich tam víc:
        – v Manifestu nebyly Activity.
        – dva layouty soupeřily o stejné ID.

        Nicméně mě napadla otázka: Bylo by možné, aby v layoutu add_note ten <EditText android:id=“@+id/­text“ … /> zabíral jen určitý počet řádků … například 4? Pokud ano, jak toho docílit?

        S pozdravem a přáním vytrvat v osvětě co nejdéle,
        KiN

        1. KiN

          Re: SQLite

          Tak už jsem na víceřádkovost přišel:
          <EditText android:id=“@+id/­text“
          android:layou­t_width=“match_pa­rent“
          android:layou­t_height=“wrap_con­tent“
          android:hint=“@strin­g/text“
          android:input­Type=“textMul­tiLine“
          android:lines=“5″ />

  6. Jirka

    Parametr v konstruktoru fragmentu

    Původně mi aplikace při otočení displeje (v okamžiku prohlížení detailu poznámky) padala. Ukázalo se, že stačilo vyřešit jinak předávání id – nevyužívat k tomu konstruktor SingleNoteFrag­mentu, ale metodu setArguments, konkrétně v metodě NotepadActivi­ty.showNote() a SingleNoteActi­vity.onCreate().
    Přidání konstruktoru s argumenty se u fragmentů nedoporučuje, konkrétně Eclipse mě před tím varovalo (a díky tomu jsem tu chybu odstranil).
    Pro úplnost ještě dodám, že není dobré používat pro předání parametrů nějakou vlastní public metodu fragmentu, protože toto řešení přestává fungovat při znovuvytváření (?) fragmentu (při to nastalo právě při otočení displeje). SetArguments() toto právě řeší.

    1. Matěj KonečnýAutor příspěvku

      Re: Parametr v konstruktoru fragmentu

      Přesně tak to je, máš pravdu :). Ve článku je pod kódem ostatně odkaz na Errata. Omlouvám se nicméně za hrubou chybu, nechtěl jsem všechno komplikovat ještě nějakými setArguments a Bundle atp., ale vyhnul jsem se tomu opravdu nešťastně.

      1. jirkam01

        Re: Parametr v konstruktoru fragmentu

        Ten odkaz jsem nenašel dostatečně blízko. Aspoň jsem si na to přišel sám a budu si to pořádně pamatovat :) Každopádně díky za vstřícnou reakci.

  7. jirkam01

    Potřeba více aktivit?

    Narazil jsem teď na oficiální návod na fragmenty: http://developer.android.com/training/basics/fragments/index.html
    Je tam zásadní rozdíl oproti tomuto článku v tom, že tam si vystačí s jedinou aktivitou. Takže SingleNoteActivity a AddNoteActivity vlastně nejsou potřeba, i na úzkém telefonu bude všechno řídit NotepadActivity. Bude mít layout, kam se bude vkládat fragment podle potřeby (takže jedna aktivita, jeden layout a do něj dynamicky podle situace vkládáno několik různých fragmentů: AddNoteFragment, SingleNoteFragment a NotesListFragment). Viz ten návod.
    Má nějakou výhodu vytvářet takto víc aktivit?

  8. Kubicon

    Padání Notepadu

    Při zobrazení poznámky a otočení telefonu nebo vysunutí hardwarové klávesnice (restart aplikace, znova proběhne onCreate) aplikace padá. Jak to?

  9. Liner

    Listenery
    Ahoj. Android vidim poporvý v životě a javu tak lehce před několika lety, takže možná až moc hloupá otazka. Ale…v NoteListFragment, když chceme, aby reagoval na kliknuti na položku a přepišeme onListItemClick, proc musime zavadet nejaky listener? nešlo by to vyrešit jednodušeji? Mě přijde, že je tam jakoby navic. Patři tam asi určitě, když tam je… ale nejde mito uplně hlavy. Stejně tak proč je nakonci kodu public static interface OnNoteClickedListener {
    public void onNoteClicked(long id);
    }

    a jeste vyznam toho interface v deklaraci tehle metody.

    Možná až moc zmatenej dotaz, ale tohle jediny mi nejde nejak moc do hlavy.

    Předem díky za odpověd

  10. Petr

    Modifikátor layoutu nefunguje na API 2.2?
    Ahoj, nevím, jestli to tu ještě někdo vůbec čte, ale kdyby náhodou… Nefunguje mi (pomocí emulátoru) vícesloupcový layout pro systém verze 2.2. Vždycky se zobrazí jednosloupcový layout. Zkoušel jsem ten adresář „layout-w660dp“ různě přenastavovat, ale nic se nechytlo. Na verzi 4.0.x mi to běželo v pohodě. Já měl za to, že díky té support knihovně bude fungovat i toto? V čem by mohl být problém? Nebo to skutečně na 2.2 nefunguje?

    1. Petr

      Re: Modifikátor layoutu nefunguje na API 2.2?
      A opět si odpovím sám :)
      Modifikátory typu w600dp jsou známé až od verze 3.2 (API level 13). Pro nižší verze funguje např. values-large-land.

  11. Tonda

    Na nic tutorial
    Tutorial je na nic.. Jako by to psal nejvetší nerd na světe v podstatě jen pro sebe a nepočital s tím že to někdo čte. Napřiklad neni vysvětleno do jakeho souboru kod psat. Je tam kus kodu a pod nim se mluvi uplně o něčem jinem. Není to prostě krok po kroku.. Ale jiank snaha byla

  12. Vitek

    MENU_DELETE_ID
    Ve fragmentu NotesListFragment chybí deklarace konstanty:
    private static final int MENU_DELETE_ID = 0;
    …když by to někoho mátlo :-)

  13. Pepin

    Pad pri otoceni aplikace pri zobrazeni ve dvou panelech
    Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.notepad.SingleNoteFragment: make sure class name exists, is public, and has an empty constructor that is public

    Když otočím zařízení,kde je již načten nadpis i poznámka (dva panely) a má dojít i k otočení aplikace, tak spadne na notepad.SingleNoteActivity.onCreate(SingleNoteActivity.java:12) na tom super onCreate(…..
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // tady to spadne při otočení zařízením
    setContentView(R.layout.single_note_container);

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3686