Hirdetés

2024. március 28., csütörtök

Gyorskeresés

Hozzászólások

(#601) Sianis


Sianis
addikt

Szerintem, menjünk át ide, ne offoljunk.

Sianis

(#602) pigster


pigster
senior tag

Azt hogyan lehet megcsinálni, hogy sqlite használatával a rendezés magyar ékezethelyes legyen? Tehát az "Á"-val kezdődő dolgok ne a lista végér kerüljenek, hanem az "A" után?

Cursor android.database.sqlite.SQLiteDatabase.query(
String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy)

Így csinálnám, működik is szépen, de hol tudom beállítani, hogy magyar abc alapján rendezzen?

[ Szerkesztve ]

FIGYELEM! A többszázezres Samsung okostévék kéretlen reklámokat tolnak az arcodba.

(#603) WonderCSabo válasza Sianis (#595) üzenetére


WonderCSabo
félisten

4.0 feletti eszközökkel lehet egyelőre használni, hogy a mérete kellően kicsi lehessen.

Ezt kifejtenéd picit bővebben? Miét lesz kicsi a mérete 4.0+ esetén?

(#604) Sianis válasza WonderCSabo (#603) üzenetére


Sianis
addikt

Nem kell az ActionBarSherlock miatt plusz libet belehúzni. Illetve még ott van a Holo Everywhere. Valamint van egy olyan titkos vágyam, hogy megnézem, csak 4.0 felé lőtt appnak van-e esélye elterjedni.

Sianis

(#605) WonderCSabo válasza Sianis (#604) üzenetére


WonderCSabo
félisten

Köszi a választ, így már világos mire gondoltál. Az ActionBarSherlock nagyon jó lib, a Holo Everywhere-t nem ismerem, feltételezem azt csinálja amit a neve mond. :)

(#606) fatal`


fatal`
félisten

A legtöbben biztos láttátok / próbáltátok már, de azért leírom, hátha van valaki, aki nem vette észre:

Érdemes letölteni az SDK Managerben az Intel x86 Emulator Accelerator (HAXM) extrát és az emulátornál x86 imaget használni, mert így értelmes tempója lesz az emulátornak (gpu emulációval játékfejlesztésre is alkalmas végre, bár elvagyok a BlueStacks-szel). Intel VT-x képes cpu (és gondolom chipset) és biosban bekapcsolt VT kell hozzá.

Most már csak az eclipseből fordított apk átviteli tempójára kéne valamit kitaláljanak, mert az még mindig baromi lassú.

[ Szerkesztve ]

(#607) WonderCSabo válasza fatal` (#606) üzenetére


WonderCSabo
félisten

Hmm, ezt kipróbálom, nem vagyok benne biztos, hogy ezt használom-e.

(#608) Karma válasza fatal` (#606) üzenetére


Karma
félisten

Sajnos ha az ember WP8 SDK-val is dolgozik, nem használhatja, mert összeakad a Hyper-V-vel :(

“All nothings are not equal.”

(#609) WonderCSabo válasza fatal` (#606) üzenetére


WonderCSabo
félisten

Nem hiszem el, Google APIs-al nem megy, csak alap Android-al. :(

(#610) fatal` válasza Karma (#608) üzenetére


fatal`
félisten

Igen, észrevettem. :( Gondoltam megnézegetem a WP8 SDK-t, hogy milyen, de összeakad a kettő. Remélem majd javítják. Bár nem tudom, hogy ez bugos-e, vagy a hyper-v.

(#609) WonderCSabo: Azt hiszem, csak az alap droidhoz van x86 image. :(

[ Szerkesztve ]

(#611) SektorFlop válasza fatal` (#610) üzenetére


SektorFlop
aktív tag

Én épp most próbálom virtualbox-al. Múltkor említették nekem hogy azzal sokkal jobb.

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#612) fatal` válasza SektorFlop (#611) üzenetére


fatal`
félisten

Ehhez nem kell Vbox, a gyári emulátor fut vt-vel és gyors. A VirtualBoxos verzióból 2.2 volt a legújabb, amikor néztem és elég körülményes használni, akkor már inkább a bluestacks. :)

Ja és az a 2.2-es verzió szintén nem emulált opengl-es 2.0-t, így én nem mentem vele semmire. Normál appok fejlesztéséhez persze jó lehet (és közben valószínűleg van már újabb verzió is).

(#613) Karma válasza fatal` (#610) üzenetére


Karma
félisten

Ezt a leírást most találtam, kevés fájdalommal lehet egy gépen Hyper-V és HAXM is, noha nem is egy időben :) Főleg hasznos, mert VMware-t is szeretnék néha használni.

“All nothings are not equal.”

(#614) fatal` válasza Karma (#613) üzenetére


fatal`
félisten

Igen, ezt már próbáltam. Restart kell neki ez a baj, de annyira nem nagy gond. :)

Mondjuk közel sem biztos, hogy fogok WP-re fejleszteni, egyelőre csak feltelepítettem az SDK-t. :)

(#615) fatal`


fatal`
félisten

Valaki nem tudja, hogy hogy lehet lekérni, hogy az adott eszköz, amin fut a program milyen képernyő-tájolásokat támogat? (álló-fekvő)

Konkrétan az a gondom, hogy a programom csak állót támogat, fekvőn indítva széthúzza a képet, ezt szeretném elkerülni (fekete csíkot fogok rakni), de csak akkor, ha nincs álló mód eszközön.

Próbáltam googleval keresgélni, de nem találtam csak olyan bejegyzéseket, ami a jelenlegi állapotot kéri le.

Most állóra van korlátozva a program, arra gondoltam, hogyha a képméret még mindig szélesebb, mint magasabb, akkor valójában fekvő. Viszont nem tudom, hogy ez nem okozna-e problémát egy tableten, ráadásul ezt tesztelni sem tudom, eszköz hiányában.

[ Szerkesztve ]

(#616) Karma válasza fatal` (#615) üzenetére


Karma
félisten

Láma viszontkérdés: melyik eszköz nem tud portrait állást? :Y TV?

“All nothings are not equal.”

(#617) fatal` válasza Karma (#616) üzenetére


fatal`
félisten

Médiaboxok, tv-re kötött telefon / tablet (HDMI).

[ Szerkesztve ]

(#618) fatal`


fatal`
félisten

Ugyanide tartozó kérdés, mert volt egy kis kavarodás a manifestemben, ha én android:screenOrientation="sensorPortrait" -ot használok, akkor mi történik egy Froyo eszközön? Ez a paraméter API Level9-nél lett bevezetve.

(#619) Sianis válasza fatal` (#618) üzenetére


Sianis
addikt

Én arra tippelnék, hogy unspecified fallback fog történni. Nem tudja értelmezni az értéket, ezért az alapértelmezettet fogja használni. Egyéb XML paramétereknél is ez szokott lenni, hogy ami az új API-ban jött be, de a régi nem érti, akkor választ egy alapértelmezettet. Talán a match_parent - fill_parent páros ilyen. A match_parent-es layoutok is működnek API 7-en.

Sianis

(#620) fatal` válasza Sianis (#619) üzenetére


fatal`
félisten

Köszi. :)

(#621) pigster


pigster
senior tag

Ha a készüléket elforgatom, akkor az Aktivity meghívásakor átadott Intent, meg az átadott extra is megy a levesbe, vagy pedig az Intentek "túlélik" az elforgatást, és azután is használhatók?

Illetve erre tud valaki esetleg megoldást?

[ Szerkesztve ]

FIGYELEM! A többszázezres Samsung okostévék kéretlen reklámokat tolnak az arcodba.

(#622) pittbaba


pittbaba
aktív tag

Sziasztok!

Szeretnék egy ajtónyitót csinálni az egyik kihasznált Androidos telómból. A programozás résznél egyelőre nem tartok, de ahogy néztem, eléggé könnyen megoldható, viszont az elektronikai résszel bajban vagyok. Találtam több netről rendelhető usb-s relay boardokat, de attól félek, arra rádugom a telefonomat, és nem fog töltődni USB-n keresztül, ami kellemetlen. Az usb kábel szétbarmolásával meg lehetne oldani a tápellátást, de inkább titeket kérdeznélek meg előbb, van e valamilyen bevált kütyü erre, ami esetleg tölti is a telefont USB-n keresztül miközben rajta lóg?

PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

(#623) Karma válasza pittbaba (#622) üzenetére


Karma
félisten

Nem vagyok nagy guruja a témának, de a Google kitalálta az ilyen felhasználáshoz az ADK-t, és vannak fain kulcsrakész lapok az ilyen hobbifejlesztéshez.

“All nothings are not equal.”

(#624) BigBlackDog


BigBlackDog
veterán

Sziasztok!
Kis segítséget szeretnék kérni. Google Play Szolgáltatásokat szeretném telepíteni, mivel az egyik alkalmazáshoz kellene (SupportMapFragment-ből származtatott saját osztályhoz). Playből sikeresen le is töltődik, de telepítésnél kapok egy hibaüzenetet; "Összeegyeztethetetlen más, ugyanazon megosztott felhasználói azonosítót használó alkamazással/alkalmazásokkal". Próbáltam más eszközről áthúzni az apk-t, majd berakni a system/app mappába (jogosulságokat beállítottam), de semmi nem történt. adb installal telepítve [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] hibát kapok.
Egy Sony Ericsson WT19i készüléken próbálkozok, amin RealICS r6 van telepítve, ha esetleg lényeges lenne. Mit kéne csinálnom, hogy tudjam telepíteni, használni? Előre is köszönöm. :R

(#625) pittbaba válasza Karma (#623) üzenetére


pittbaba
aktív tag

Köszönöm! Nagy segítség ez! :R

Azt nem tudom, elvileg a telefonban lennie kell driver-nek ami felismeri a rá dugott USB-s eszközt? Van ilyen szerintetek?

PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

(#626) shinodas


shinodas
tag

Sziasztok srácok!
Van egy látszólag jó példa kódom, aminek elvileg kellene is futni, de minden alkalommal, ha a telefonon kipróbálom FC-t dob. Nem igazán van még tapasztalatom androiddal, ezért kérdezlek titeket, hogy mi lehet a gond?

[link]

(#627) Karma válasza shinodas (#626) üzenetére


Karma
félisten

Eclipse-ben Debug módban futtasd a programot, és akkor látni fogod hogy mi a konkrét exception és hogy honnan jön. Ebből ha nem jössz rá, oszd meg a stack trace-t velünk is.

“All nothings are not equal.”

(#628) shinodas válasza Karma (#627) üzenetére


shinodas
tag

Látszólag valami bennragadt egy cacheben, ez okozta az FC-t. Most működik.

Köszönöm szépen a tanácsot! :)

(#629) shinodas


shinodas
tag

Helyesbítenék: Debug módban egy ideig fut jól, de ha rendesen elindítom az appot, marad az FC.

A console ezt írja:

[2013-05-05 14:20:32 - Surface2] ------------------------------
[2013-05-05 14:20:32 - Surface2] Android Launch!
[2013-05-05 14:20:32 - Surface2] adb is running normally.
[2013-05-05 14:20:32 - Surface2] Performing com.example.surface2.MainActivity activity launch
[2013-05-05 14:20:32 - Surface2] Automatic Target Mode: Unable to detect device compatibility. Please select a target device.
[2013-05-05 14:20:35 - Surface2] Application already deployed. No need to reinstall.
[2013-05-05 14:20:35 - Surface2] Starting activity com.example.surface2.MainActivity on device skate
[2013-05-05 14:20:36 - Surface2] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.surface2/.MainActivity }
[2013-05-05 14:20:36 - Surface2] ActivityManager: Warning: Activity not started, its current task has been brought to the front

A logCat ezt:

05-05 14:23:52.830: W/ActivityManager(227): Activity destroy timeout for HistoryRecord{409006b8 com.example.surface2/.MainActivity}
05-05 14:23:52.870: D/AndroidRuntime(8898): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
05-05 14:23:52.870: I/AndroidRuntime(8898): Heap size: -Xmx48m
05-05 14:23:52.870: D/AndroidRuntime(8898): CheckJNI is OFF
05-05 14:23:53.130: D/AndroidRuntime(8898): Calling main entry com.android.commands.pm.Pm
05-05 14:23:53.140: D/AndroidRuntime(8898): Shutting down VM
05-05 14:23:53.150: D/dalvikvm(8898): GC_CONCURRENT freed 103K, 70% free 308K/1024K, external 0K/0K, paused 1ms+1ms
05-05 14:23:53.150: I/AndroidRuntime(8898): NOTE: attach of thread 'Binder Thread #3' failed
05-05 14:23:53.150: D/jdwp(8898): adbd disconnected
05-05 14:23:53.150: D/jdwp(8898): Got wake-up signal, bailing out of select
05-05 14:23:53.150: D/dalvikvm(8898): Debugger has detached; object registry had 1 entries
05-05 14:23:53.360: D/AndroidRuntime(8908): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
05-05 14:23:53.360: I/AndroidRuntime(8908): Heap size: -Xmx48m
05-05 14:23:53.360: D/AndroidRuntime(8908): CheckJNI is OFF
05-05 14:23:53.620: D/AndroidRuntime(8908): Calling main entry com.android.commands.am.Am
05-05 14:23:53.630: I/ActivityManager(227): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.surface2/.MainActivity } from pid 8908
05-05 14:23:53.670: D/AndroidRuntime(8908): Shutting down VM
05-05 14:23:53.690: I/AndroidRuntime(8908): NOTE: attach of thread 'Binder Thread #3' failed
05-05 14:23:53.690: D/dalvikvm(8908): GC_CONCURRENT freed 103K, 69% free 325K/1024K, external 0K/0K, paused 0ms+1ms
05-05 14:23:53.700: D/jdwp(8908): adbd disconnected
05-05 14:23:53.700: D/jdwp(8908): Got wake-up signal, bailing out of select
05-05 14:23:53.700: D/dalvikvm(8908): Debugger has detached; object registry had 1 entries
05-05 14:23:53.700: W/WindowManager(227): Rebuild removed 5 windows but added 3
05-05 14:23:53.780: D/dalvikvm(7054): GC_EXPLICIT freed 21K, 50% free 2701K/5379K, external 0K/0K, paused 432ms
05-05 14:23:58.320: I/Process(8882): Sending signal. PID: 8882 SIG: 9
05-05 14:23:58.330: E/InputDispatcher(227): channel '40a14228 com.example.surface2/com.example.surface2.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8
05-05 14:23:58.330: E/InputDispatcher(227): channel '40a14228 com.example.surface2/com.example.surface2.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
05-05 14:23:58.330: I/ActivityManager(227): Process com.example.surface2 (pid 8882) has died.
05-05 14:23:58.350: I/WindowManager(227): WIN DEATH: Window{40a14228 com.example.surface2/com.example.surface2.MainActivity paused=false}
05-05 14:23:58.350: I/WindowManager(227): WIN DEATH: Window{4099a168 SurfaceView paused=false}
05-05 14:23:58.390: W/InputManagerService(227): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@405ab318

(#630) shinodas


shinodas
tag

Illetve azt megtudnátok mondani, hogy Surfaceview-ra hogyan lehet egy textViewt aplákálni? :)

(#631) thon73


thon73
tag

Elkezdtem haladni a korral, megismerkedtem a Fragment-kezeléssel.
DE!
Az normális, hogy az Android Developers honlapon lévő példakódok hibásak?? :(((
Namármost, ahogy végiggondoltam, úgy viszont működik (és a hibás elgondolást is megtaláltam a példakódban).
Van viszont erről (Fragment) valahol használható leírás, hogy mi a helyes felhasználás módja, vagy mindenki kitalálja magának oszt lesz ami lesz??
Vagy mi van ilyenkor, amikor a "HIVATALOS" dokumentáció hülyeséggel példálózik?

(#632) thon73 válasza thon73 (#631) üzenetére


thon73
tag

A mérgelődésen kívül két konkrét kérdésem lenne Fragment-ekkel kapcsolatban:

1. A Fragment által létrehozott Options-Menu a Fragment eltávolítása után is megmarad. Ha új Fragment példányt csatolok be, akkor az előző (eltávolított) példány Options-menu-je is, és az új is látszik. Ezt (a régi menüt) mivel tudom kitörölni a Fragment eltávolításakor? (Az előző Fragment már "eltűnt", vagy legalábbis tag keresésével nem találja meg. De a menu maradt.)
Az invalidateOptionsMenu nem működik, vagy nem tudom, hol kellene kiadni. A menu.clear() (pl. a prepare részben) viszont mindent kitöröl, és egyáltalán nem látszik a menü.

2. Ha elmentettem egy transaction-t a backstack-re, és nem arrafelé megyek vissza (mert pl. elfordítottam a telo-t), akkor hogyan tudom azt onnan eltüntetni? ((A BackStack-on lévő elemek száma minden elfordításkor növekszik, hiába lesz közben "Destroy". Ez nem is lenne baj, csak a visszafordításkor az alap Fragment-ről szeretnék indulni, miközben a "második" Fragment (vagyis a tranzakció) el van mentve a BackStack-re.))

API17-tel fordítottam, de API8 minimumra, tehát support package-t használtam. Elvileg ez nem lehetne baj. Előre is köszönöm, ha valakinek van ezzel tapasztalata.

(#633) Sianis


Sianis
addikt

Fragmentnél adtál meg setHasOptionsMenu(true)-t? Vagy honnan vezérled a menü létrehozását? Nekem így eddig nem volt vele gondom, minden fragment magának definiálja a menüjét és a backstackes dolgokkal is szépen együttműködik a cserélődés. Igaz én AndroidAnnotations-t használok.

Sianis

(#634) kocska86


kocska86
csendes tag

Sziasztok!

Előre leszögezném, hogy kezdő vagyok az android programozás terén...
A telómhoz szeretnék csinál egy usb háttértár programot. A programom már az alap funkcióját ellátja.Viszont, ha PC-re csatlakoztatom, és valamit írok, vagy valamit törlök az SD kártyáról, akkor az a telefonra való visszacsatolás után nem látszik.
Ha látni akarom az SD kártya tartalmának a változását, akkor újra kell indítanom a telefon.
A kérdés tehát az lenne...hogy milyen módon tudnám az SD kártya teljes tartalmát újra olvastatni?
Próbálkoztam a MediaScannerConnectionClient-el, de sikertelenül.
A kátrya tartalmát ugyan beolvassa, de változásokat nem nem jeleníti meg, vagy nem is észleli.
Gondolom valami hasonló metódus kellene, mint ami bootoláskor lefut, de mivel nem tudom, hogy pontosan mi is az, ezért nem tudtam elindulni ezen a vonalon.
Örülnék, ha valaki tudna útmutatást adni!

Előre is köszönöm!

(#635) thon73 válasza Sianis (#633) üzenetére


thon73
tag

Igen, a menü létrehozása tökéletesen megy. A menüt a fragmenten belül hoztam létre, és szeretném is, ha ott maradhatna. A gond akkor kezdődik, ha egy fragment osztály több példánnyal kapcsolódik be, mert akkor minden példány hozzáadja a saját menüjét. Ez idáig logikus is, de ha remove v. replece-szel elveszem a fragment-példányt (és persze a back-stack-ben sincs), a menüje akkor is megmarad. És - noha nincs már hivatkozás elvileg sehol erre a példányra - a menü az activity újraindítása után is megmarad! Minden indításnál új fragment-példányt adtam egy FrameLayout-ba (az előzőt elvileg eldobtam) és több száz bejegyzésem lett a menüben!
Tudom, vissza lehet szerezni a Fragmentet, a gond csak az, hogy ha egyszer valahova becsatoltam, ugyanazt a példányt (külön időpontban sem!) nem lehet másik Layout-ba becsatolni. Ezért kellene két példány egy fragmentből (külön elrendezésben tehát külön időben) de EGY menüvel egyszerre.
Egyetlen ötletem van: az activity onprepareoptionsmenu-jében ellenőrizni, hogy adott taggal van-e élő fragment, és eszerint betenni a menüt. De ha lehet, a fragmenten BELÜL szeretném a menükérdést megoldani. Csak nem megy…

A BackStack kérdés egyszerűbb: az nekem is prímán működik. De ha nincs szükségem az utolsó elmentett transaction példányra, azt hogy tudom "visszajátszás" nélkül eldobni? Vagyis csak levenni a stackról, de nem végrehajtani.

Köszönöm!

(#636) shinodas


shinodas
tag

Multi touch-al próbálkozok, és az lenne a kérdésem, hogyan tudnám egyszerre mozgatni a két kört? Mert csak az egyik elem követi az ujjam, a másik pedig a mozgatott objektumot követi, ha a másik ujjammal is megérintem a képernyőt. :D

[link]

[ Szerkesztve ]

(#637) thon73 válasza shinodas (#636) üzenetére


thon73
tag

Pl. így? Az ID-t is kiírja.

private final int MAX_POINTER=10;
private float[] posx=new float[MAX_POINTER];
private float[] posy=new float[MAX_POINTER];
private int[] id=new int[MAX_POINTER];
private int pointerCount = 0;

@Override
public boolean onTouchEvent(MotionEvent event)
{
switch (event.getActionMasked())
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:

pointerCount = event.getPointerCount();
for (int cnt = 0; cnt < pointerCount && cnt <MAX_POINTER; cnt++)
{
posx[cnt] = event.getX(cnt);
posy[cnt] = event.getY(cnt);
id[cnt] = event.getPointerId(cnt);
}
this.invalidate();

break;
}
return true;
}

@Override
protected void onDraw(Canvas canvas)
{
for (int cnt = 0; cnt < pointerCount; cnt++)
{
canvas.drawText(Integer.toString(cnt) + ", [" + Integer.toString(id[cnt]) + "]", posx[cnt], posy[cnt]-80f, text);
canvas.drawCircle (posx[cnt], posy[cnt], 30f, paint);
}
}
}
}

Nem vagyok benne biztos, hogy a getAction() action_POINTER_up kódot is visszaad. Ahhoz sztem. getActionMasked() lekérdezés kellene. De lehet, h. rosszul tudom. A fenti megoldás viszont akár tíz ujjal is működik. (Már ha a hardver tudja...)

[ Szerkesztve ]

(#638) thon73 válasza thon73 (#635) üzenetére


thon73
tag

Az első kérdésemet egyszerűsítem: ha egy Fragment NINCS a BackStack-ben ÉS fragmentTransaction.remove-val (utána commit-tal) levettem a képről - akkor hogyan lehet eltüntetni végleg? Az onCreateOptionsMenu pl. megtalálja.

A második kérdésem továbbra is fennáll.

(#639) thon73 válasza thon73 (#638) üzenetére


thon73
tag

Amíg a válaszokra vártam, tovább nyomoztam:
Úgy tűnik, ha egyszer egy Fragment példányt létrehoztunk, akkor az örökkön-örökké létezni fog a FragmentManager-ben - pontosabban addíg, amíg a program VÉGLEG be nem fejeződik (tehát nem konfig vált. miatt.) Ez meglehetősen furcsa működés, mert akkor mire szolgál a setRetainInstance?
Érdekes, jobban elolvasva a doksi is ezt mondja: a detach hasonló ahhoz, mintha a BackStack-en lenne a fragment, csak ilyenkor a FragmentManager tárolja.
Support package-ot használok API8 minimum mellett API17-tel fordítva.
Meg tudná ezt valaki erősíteni v. cáfolni? Lehet, h. ez egy hiba? Vagy a supporttal van valami gond?

(#640) Sianis válasza thon73 (#639) üzenetére


Sianis
addikt

Sajnos, most nem tudok nagyon beleásni a témába, de annyit had tegyek hozzá, hogy nem hiszem, hogy a supportban más lenne, mint az új rendszerekben. A support tudtommal ugyanazt a kódot tartalmazza, mint ami a 4.0+ rendszerek megkaptak. Gyakorlatilag egy backport, annyi különbséggel szerintem, hogy SDK számtól függően vagy a support osztályokra, vagy a rendszer osztályaira hivatkozik.

MOD: Valami kódot nem akarsz esetleg feltölteni? Nem kell bele semmi extra logika, csak lehet, hogy rátekintve jobban kibukik a baki.

Sianis

[ Szerkesztve ]

(#641) Konair


Konair
csendes tag

Sziasztok!

Van egy BroadcastReceiver-em, és abban az onReceive elindít egy AsyncTask-ot. doInBackground-ban pedig lekérem a GPS koordinátákat.

Ám itt kapok egy java.lang.NullPointerException-t a 46. sorban, ahol ez szerepel:
locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);

Ez a lekérés működött addig, míg be nem raktam AsyncTask-ba, így arra tippelek, hogy a context-et nem adom át helyesen.
Hogyan kellene ezt jól átadni?
Valaki tudna egy rendes leírást mutatni a contextről?

Weboldal készítés felsőfokon...

(#642) shinodas válasza thon73 (#637) üzenetére


shinodas
tag

Ez nagyon szuper, köszönöm! Annyi problémám lenne vele, hogy a rajzolt alakzat, csak érintés esetén jelenik meg a képernyőn. Hogyan lehetne megoldani, hogy folyamatosan ott legyenek az alakzataim? :)

(#643) shinodas válasza shinodas (#642) üzenetére


shinodas
tag

Megoldva! :)

Azt hogy kellene, hogy a különböző pointerekhez, hogyan lehet különböző elemeket rajzolni, amit mozgatnak?

[ Szerkesztve ]

(#644) Sianis válasza Konair (#641) üzenetére


Sianis
addikt

Eclipseben tegyél oda egy breakpointot és nézd meg debug mode-ban. Meg fog ott állni a futás és meg tudod nézni, hogy tényleg null-e a context.

Vagy a task konstruktorának adnám át a contextet és menteném a taskon belül is vagy az executeon keresztül a doinbackgroundnak.

Sianis

(#645) thon73 válasza Sianis (#640) üzenetére


thon73
tag

Bocs, csak úgy értettem, hogy volt-e már valakinek ehhez hasonló tapasztalata. Neki is láttam egy egyszerűsített tesztkódot írni (az enyém meglehetősen hosszú).
Ez a teszt fragment, egyetlen metódus:

public class TestFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
TextView tv = new TextView(getActivity());
tv.setText("Hello világ!");
return tv;
}
}

És a lényeg: az activity:

public class MainActivity extends FragmentActivity
{

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
FrameLayout fl = new FrameLayout(this );
fl.setId(1234);
setContentView(fl);
}

@Override
public void onResumeFragments()
{
super.onResumeFragments();

FragmentManager fragmentManager = getSupportFragmentManager();

TestFragment test = (TestFragment)fragmentManager.findFragmentByTag("TEST");
if (test == null)
{
test = new TestFragment();
}

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(1234, test, "TEST");
fragmentTransaction.commit();
}


@Override
public void onPause()
{
super.onPause();

FragmentManager fragmentManager = getSupportFragmentManager();

TestFragment test = (TestFragment)fragmentManager.findFragmentByTag("TEST");
if (test!=null)
{
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// fragmentTransaction.detach(test);
fragmentTransaction.remove(test);
fragmentTransaction.commit();
}
}

}

((Igazából ezeken a kódokon kívül az eclipse saját indítókódján semmit sem kell változtatni, mert a View-k dinamikusan jönnek létre. A rengeteg Log-ot kitöröltem, de akár minden metódus figyelhető a LogCat-ben.))

A LÉNYEG:

Sztem. az indítás során az onResumeFragments-ben hozzáadjuk a "TEST" fragmentet,
leállításnál az onPause-ben eldobjuk. (Ha akarjuk, akkor detach is lehet.)

A REMOVE UTÁN SZERINTEM A FRAGMENTNEK EL KELLENE PUSZTULNIA A DESTROY FOLYAMÁN!

Ehhez képest újraindítás után hibaüzenet:
java.lang.RuntimeException: Unable to resume activity {.fragmenttest.MainActivity}: java.lang.IllegalStateException: Fragment already added: TestFragment{40525cf0 #0 id=0x4d2 TEST}

Vagyis az eldobott Fragmentünk "visszajött".

Ugyanez történik ID és Tag alapú keresésnél is: az eldobott Fragment megjelenik
Ha két (landscape és portrait) layout között váltogatok, akkor még hibaüzenet sem jön, csak a Fragmentek sokasodnak.
((Világos, ha a remove átkerül a legelejére, akkor nem lesz hiba, de a Fragment megmarad))

SZERINTEM:
A Fragment-ek NEM objektumként működnek, hanem sokkal jobban hasonlítanak az Activity-ra. Vagyis: létrehozás után (ez történik objektumok módjára), mindvégig megmaradnak, csak ide-oda kapcsolgathatjuk őket.
Az onRetain...-nál annyi különbség lehet, hogy ott érinetetlenül maradnak meg, itt meg a View újra készül.

Ez azért gond, mert ha egyszer egy Fragmentet valamelyik View-ba bekapcsoltunk, akkor ragaszkodik a saját View-jához, más View ID esetén hibát dob.

Képzeljünk el egy szituációt: bal oldalon a lista, jobbra az egyes elemek, külön fragmentben. Ha ezt EGY activityvel oldjuk meg, akkor NÉGY fragmentet kell kezelnünk (2 landscape, 2 külön portrait módban) VAGY ha ugyanazt az Id-t adjuk meg a két külön layout-ban lévő fragmentet fogadó View-nak, akkor csak KÉT fragmentet kell kezelnünk.
Tudom, hogy a KÉT ACTIVITY-vel való kezelést preferálják, de 1. ettől nem tudom meg, miért nem tűnnek el a fragmentek. ((2. Az activity-k közötti kommunikáció miatt ez a megoldás most nem az igazi nekem (de ez a teszt szempontjából lényegtelen))

Bocs, ha nem teljesen érthető ez, igyekeztem nagyon rövidíteni a kódot. De már csak azért is hajt a kíváncsiság, hogy ez miként műxik.

(#646) thon73 válasza shinodas (#643) üzenetére


thon73
tag

Két fontos dologra érdemes figyelni:
1. az onDraw minden invalidate után üres lappal indul. Ha meg akarod tartani az alakzatokat, akkor tárolni kell a koordinátáikat, és mindenannyiszor újrarajzolni őket. A gond az alakzatok "újra megfogásakor" jelentkezik: uis. honnét tudod, hogy egy már letett alakzatot kell mozgatnod, vagy egy újat? Legjobb lenne talán ellenőrizni, hogy az érintés vmelyik alakzat közelében van-e, és akkor azt hozzárendelni. De mindenképpen tárolni kell az adatokat.
2. nem az index számít, hanem az ID. Ez utóbbi ugyanis nem változik egy multitouch érintés során. Csak éppen nem sorban van, hanem végig kell nézni az indexeket és úgy kikeresni.
((És akkor még ott van a "historical" pontok sokasága, amivel nem foglalkoztunk.))

(#647) Konair válasza Sianis (#644) üzenetére


Konair
csendes tag

Megnéztem, tényleg null volt.
Átadtam a konstruktornak, és így már nem null.

Most lekéri a Location adatokat, de ezekkel tér vissza:
Time: 1970-01-01 01:00:00
Provider: null
Latitude: 0.0
Longitude: 0.0
Accuracy: 0.0

Weboldal készítés felsőfokon...

(#648) shinodas válasza thon73 (#646) üzenetére


shinodas
tag

Köszönöm! :)

(#649) shinodas válasza shinodas (#648) üzenetére


shinodas
tag

Az általad mutatott példában, mikor van a ciklus, ott hogyan tudom elkülöníteni a két pointerem értékét?

case MotionEvent.ACTION_MOVE:
pointerCount = event.getPointerCount();
for(cnt = 0; cnt<pointerCount && cnt<MAX_POINTER;cnt++)
{

posx[cnt] = event.getX(cnt);
posy[cnt] = event.getY(cnt);
id[cnt] = event.getPointerId(cnt);

mPosX = posx[cnt];
mPosY = posy[cnt];
}
this.invalidate();
break;

Itt szeretnék mPosX2, és mPosY2-nek is értéket adni, de nem tudom, azt a pointert, hogyan kezeljem le.

[ Szerkesztve ]

(#650) kukinyo


kukinyo
addikt

Sziasztok
Nem tudom hogy kérdésem jó helyen teszem e fel, remélem igen :)
Előszeretettel használom blade-en a CM7.2 android verzióját, amiben ugye nincs navibar funkció.
Ezt igyekszem úgy pótolni hogy a framework-res.apk-t kibontottam és a values\bools.xml-ben bekapcsoltam a statusbar soft button funkcióját.
Ez nagyon is megfelelne ha nem lennének annyira kicsik a gombok.
Megtaláltam azt hogy a statusbar magasságát hol lehet állítani, arra is rájöttem hogy a statusbar ikonjait hol tudom méretezni, viszont a soft button mérete ezekkel a beállításokkal nem változik.
Hol tudnám megnövelni a gombok méretét?

Copyright © 2000-2024 PROHARDVER Informatikai Kft.