» »

[Android]GridView vprasanje

[Android]GridView vprasanje

KernelPanic ::

Spostovani!
Delam na GUI komponenti za izbiro kategorije artiklov (GridView based) in naletel sem na primer http://www.firstdroid.com/2011/02/06/an..., kjer je element prikazan z ikonico in tekstom. Vendar, v tem primeru so ikone vnaprej dolocene, jaz pa jih moram povleci iz baze. Mi lahko kdo pomaga pri modificarnju example. Override metoda zahteva getView zahteva parameter int position, jaz bi pa tu rad podal dva parametra (string ime_kategorije ter bitmap slika_kategorije). Kako naj ustrezno prilagodim zadevo?

icurk ::

Torej sam sem delal nekaj podobnega, kjer sem slike prizakozoval iz sd kartice... Če imaš vse potrebne stvari zapisane v bazi, jih enostavno potegni ven in shrani v neko tabelo. Potem pa imaš le drugačen način prikaza slike, recimo:
File dir = new File( slika_kategorije[position]);
			Bitmap bitmap = BitmapFactory.decodeFile(dir.toString());
			imageView.setImageBitmap(bitmap);

KernelPanic ::

ahaaa hvala samo v cem je fora tega parametra tipa int (positon)

icurk ::

To ti je position "v gridu". Ker getView ti gre po domace povedano skozi vsako "celico" grida. Tako da rabis neko pozicijo, da ves kam kaj postavit.

KernelPanic ::

Ajaaaaaaaaaaaaa, torej metoda getView (ki jo moras implementirati), vraca view vsakega elementa posebej, odvisno od vrednosti parametra? Ja zdej je pa mal bl logicno vse skupaj. :D Jaz sem mislil, da getView vrne celoten GridView. Ok, zdej, ce si pa podobno delal, bi pa ti se opisal situacijo, ker imam vrzeli trenutno: Torej, imam CDatabaseManager class, v katerem skozi metode klicem php funkcije na strezniku. Te php metode mi vracajo podatke v obliki json objektov. Nato imam razred CMerchandiseItem, v katerem se nahaja "opis" kategorije izdelka - bitmap in naziv. Kako sedaj array teh CMerchandiseItem-ov povezem z razredom (to so dejansko kategorije izdelkov, ki jih dobim iz baze - slika in naziv kategorije), ki je dedovan iz BaseAdapter?

icurk ::

Je tako, vrača view vsakega element posebej. Vrača ti pa tisto, kar ti nastavljaš. Po navadi imaš podatke, ki jih boš predstavljal v kakšni tabeli... Prav zato greš skozi celotno tabelo prav s parametrom position. Moraš pa seveda nastaviti tudi metodo getCount, da ti vrne velikost te tabele s podatki, da ve koliko elementov sploh je v gridu.

Ne razumem pa te točno, kar hočeš sedaj narediti, upam da je to kaj iščeš.... Tvoj array, kjer boš imel potrebne podatke za prikaz(naziv, pot slike), nastaviš tako, da ga lahko kličeš iz adapterja.
Sicer sem pa sam tudi še zelo zelen glede Androida, saj sem se pred kakšnimi tremi tedni, prvič šele srečal z njim, tako da upam da ne govorim kakšnih neumnosti :)

KernelPanic ::

Torej, icurk, ce ti kaj pomaga, BaseAdapter sem nadomestil z ArrayAdapter (prebiral sem android docs) in tukaj direktno v konstruktor podas array podatkov, ki jih bos potreboval. Vendar sem naletel na tezavo: V dokumentaciji sem podrobno pregledal vse mozne konstrutorje razreda ArrayAdapter, nasel ustreznega in sedaj mi koda:
public final class CItemMerchandiseCategoryAdapter extends ArrayAdapter CItemMerchandiseCategory // izpustil sem oglata oklepaja ker mi forum tezi zaradi nedovoljene HTML oznake - wtf?
{
    private Context m_oContext;
    public Context context()
        { return this.m_oContext; }
    public void setContext(final Context c)
        { this.m_oContext=c; }

    CItemMerchandiseCategoryAdapter(Context context,
                                    int textViewResourceId,
                                    CItemMerchandiseCategory[] categories)
    {
    }   // default constructor

    ....
}
javi sledece napake:
C:\Users\xxx\Projects\T\src\com\t\categories\CItemMerchandiseCategoryAdapter.java:30: error: no suitable constructor found for ArrayAdapter()
{
constructor ArrayAdapter.ArrayAdapter(Context,int,int,List CItemMerchandiseCategory) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int,List CItemMerchandiseCategory) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int,int,CItemMerchandiseCategory[]) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int,CItemMerchandiseCategory[]) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int) is not applicable
(actual and formal argument lists differ in length)
Zgledoval sem se po primeru http://www.ezzylearning.com/tutorial.as... in v tem primeru so podatki za prikaz deklarirani kot navaden array (kot pri meni), vendar meni noce prekompajlat zadeve!

Kaj delam narobe?

Spura ::

1. Zgleda da poskusas extendat 2 razreda, kar ne mores.
2. Tvoj konstruktor klice konstruktor super classa brez parametrov. Tak konstruktor ne obstaja, kar ti tudi pise v napaki.

KernelPanic ::

Ahaaaaaa, sem klical constructor super classa, prej nisem imel tega stavka in je prevzel default parameterless varianto, ki ne obstaja! Sedaj mi je jasno, hvala!

Spura ::

Vedno se klice en konstruktor od super classa

KernelPanic ::

Ja itak, saj je loginco!

icurk ::

Zakaj pa ne nardis inner class, ki extenda baseAdapter, podatke pa pridobis recimo v oncreate metodi nadrejenega razreda in jih shranis v neko globalno tabelo, katera ti bo pol dostopna tudi v inner classu...

Upam da razumes kaj hocem povedat :)

KernelPanic ::

Ja stekam, dobra ideja, samo, sedaj sem se lotil malce drugace, bom pa vsekakor imel tvojo resitev v mislih. Glede teh inner classov, to je moja subjektivna ocena, koda je meni zelo ugly ob uporabi inner classov, ne maram jih ...

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C#, OBD2 in branje iz porta

Oddelek: Programiranje
191476 (1093) detroit
»

[Android] Bluetooth aplikacija

Oddelek: Programiranje
51010 (873) marjan_h
»

android črta

Oddelek: Programiranje
412270 (1541) g333kk
»

[Android]Cudno obnasanje aplikacije in emulatorja

Oddelek: Programiranje
71231 (1060) KernelPanic
»

[Android]Software Design vprasanje

Oddelek: Programiranje
91769 (1589) KernelPanic

Več podobnih tem