» »

[Android]Vprasanje glede GUI ter pripadajoce XML datoteke

[Android]Vprasanje glede GUI ter pripadajoce XML datoteke

KernelPanic ::

Spostovani!

Zacel sem se uciti programiranja v Androidu in me nekaj zanima: Kakor razumem clanke na netu, ima vsaka GUI forma v Androidu svojo XML reprezentacijo, s katero lahko "handcode" kreiramo GUI od Activity. Jaz bi rad naredil Tabbed Activity (nekako tak izgled programa, kot je Dialer na telefonih z Android OS), vendar mi to nikakor ne uspe. Torej, vprasanje 1:

Kaj hudica v xml datoteki pomeni "android:id=”@+id/my_tabhost", oziroma, kje poljuben id vezem na GUI komponento? Aja, uporabljam Eclipse IDE.

Lp,
M.

KernelPanic ::

Izgleda, da je nekaj narobe z Eclipse, namrec, ko bi rad oblikoval (v graficnem nacinu) Activity, dobim v Error Log sledece:
eclipse.buildId=M20120208-0800
java.version=1.7.0_03
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Command-line arguments: -os win32 -ws win32 -arch x86_64

Error
Sun Mar 25 10:13:37 CEST 2012
main.xml: TabHost requires a TabWidget with id "android:id/tabs".

com.android.layoutlib.bridge.impl.RenderSessionImpl$PostInflateException: TabHost requires a TabWidget with id "android:id/tabs".

at com.android.layoutlib.bridge.impl.RenderSessionImpl.setupTabHost(RenderSessionImpl.java:1192)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.postInflateProcess(RenderSessionImpl.java:1097)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.postInflateProcess(RenderSessionImpl.java:1175)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:332)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:324)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1361)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1115)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ConfigListener.onThemeChange(GraphicalEditorPart.java:533)
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.onThemeChange(ConfigurationComposite.java:2277)
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.access$10(ConfigurationComposite.java:2265)
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite$8.widgetSelected(ConfigurationComposite.java:526)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Mogoce pozna kdo resitev za ta bug?

Mavrik ::

Saj ti zelo jasno piše:

TabHost requires a TabWidget with id "android:id/tabs".


Če delaš s TabHost (kar ti močno odsvetujem, saj se ga več ne podpira) rabiš znotraj TabWidget z IDjem "android:id/tabs"

Drugače pa ko imaš vprašanja tipa "Kaj hudiča pomeni -nekaj-?" je tvoja prva pot na developers.android.com, recimo razlaga za tvoje vprašanje.
The truth is rarely pure and never simple.

KernelPanic ::

Mavrik je izjavil:

Saj ti zelo jasno piše:

TabHost requires a TabWidget with id "android:id/tabs".


Če delaš s TabHost (kar ti močno odsvetujem, saj se ga več ne podpira) rabiš znotraj TabWidget z IDjem "android:id/tabs"

Drugače pa ko imaš vprašanja tipa "Kaj hudiča pomeni -nekaj-?" je tvoja prva pot na developers.android.com, recimo razlaga za tvoje vprašanje.
Ma to vem, sprasujem glede bug-a v eclipsu, saj ne morem graficno oblikovati GUIja, to je prava napaka, ne pa moja koda!

Mavrik ::

Kot sem ti rekel - TabHost je deprecated, se ga naj ne bi uporabljajo in ga zato tudi GUI editor ne podpira.

Itak se pa moraš naučiti ročno delati gui z XML, grafični editor ni dovolj dober za večino stvari.
The truth is rarely pure and never simple.

icurk ::

Kot še eden začetnik v Android programiranju me zanima s čim nadomestimo TabHost, glede na to da pravite da se ga naj nebi več uporabljajo.

Mavrik ::

Če nisi opazil uporabljajo vse nove aplikacije (Play Store, YouTube, Boid for Android, etc.) namesto tega ViewPager. Nekaj pomoči še dobiš v ABS knjižnici.

Tabi so izumrli iz designa aplikacij že nekje okoli verzije 2.0.
The truth is rarely pure and never simple.

KernelPanic ::

Mavrik je izjavil:

Kot sem ti rekel - TabHost je deprecated, se ga naj ne bi uporabljajo in ga zato tudi GUI editor ne podpira.

Itak se pa moraš naučiti ročno delati gui z XML, grafični editor ni dovolj dober za večino stvari.
Ok, hvala, s tem se popolnoma strinjam, ampak, daj mi samo se prosim vsaj namigni, kje se v kodi poveze id z xml id identifikatorjem za dolcoen gui.

Mavrik ::

Android SDK ti zgenerira razred "R.java" v mapi "gen", ki ima reference do id-jev, ki si jih ustvaril v XMLjih.

torej:

android:id="@+id/moj_nekaj" dobiš tako da dostopiš do R.id.moj_nekaj
The truth is rarely pure and never simple.

KernelPanic ::

Mavrik je izjavil:

Android SDK ti zgenerira razred "R.java" v mapi "gen", ki ima reference do id-jev, ki si jih ustvaril v XMLjih.

torej:

android:id="@+id/moj_nekaj" dobiš tako da dostopiš do R.id.moj_nekaj
Tole mi je cudno. Ce dam "@+id/nekaj", je to nov id, vendar se mi koda ne prevede.

KernelPanic ::

KernelPanic je izjavil:

Mavrik je izjavil:

Android SDK ti zgenerira razred "R.java" v mapi "gen", ki ima reference do id-jev, ki si jih ustvaril v XMLjih.

torej:

android:id="@+id/moj_nekaj" dobiš tako da dostopiš do R.id.moj_nekaj
Tole mi je cudno. Ce dam "@+id/nekaj", je to nov id, vendar se mi koda ne prevede.
Ups, moja napaka! Stvar se prevede, nekaj drugega je bilo narobe, pardon. Najlepsa hvala za pomoc, vendar bi te/vas sedaj vprasal se nekaj. Torej TabHost gre ven, to sprejmem. Kako/s cim pa naj potem naredim mainActivity, da bo uporabnik glede na izbiro tipa iskanja lahko iskal v sqlite tabeli po:
- activityDirectSearch bo uporabnik iskal po stolpcu ime iz tabele. Namrec, za ta tip iskanja bi naredil table GUI komponento, v kateri bi bili podatki iz stolpca "name" iz tabele. To je naravnano za napredne uporabnike, ki bodo iz imena ze priblizno vedeli, kaj bodo uporabili.
- activityParamSearch: v tem activity-ju bo lahko uporabnik iskal podatke v tabeli z pomocjo vnosa zelenih vrednosti v polja in s temi vrednostmi bo omenjena activity iskala podatke po bazi.

Zaradi (za zacetek) teh dveh moznosti sem hotel narediti razred activityMain, ki bi vseboval dva taba: Direct Search in Parametrical Search. Ker si rekel, naj se izognem TabHostu, mi lahko prosim predlagas, kateri GUI element naj uporabim, oz., s katerimi elementi naj ta task resim?

Lp,
M.


Vredno ogleda ...

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

Eclipse in windows 8

Oddelek: Pomoč in nasveti
12853 (606) mihibo5
»

[android] crash

Oddelek: Programiranje
6890 (699) messi
»

Ne zazna R.class -android

Oddelek: Programiranje
17834 (672) Marat
»

java datapool - derby

Oddelek: Programiranje
61351 (1200) jlpktnst
»

tomcat in datasource

Oddelek: Programiranje
131293 (1050) infiniteLoop

Več podobnih tem