Hirdetés
- Bemutatkozott a Poco X7 és X7 Pro
- Redmi Note 14 5G - jól sikerült az alapmodell
- Samsung Galaxy Watch8 és Watch8 Classic – lelkes hiperaktivitás
- Google Pixel 9 Pro XL - hét szűk esztendő
- Vivo X300 Pro – messzebbre lát, mint ameddig bírja
- Samsung Galaxy S25 - végre van kicsi!
- iPhone topik
- Samsung Galaxy A56 - megbízható középszerűség
- Xiaomi 15T Pro - a téma nincs lezárva
- One mobilszolgáltatások
Új hozzászólás Aktív témák
-
WonderCSabo
félisten
Sziasztok!
Egy olyan widgetre lenne szükségem, mint a GridView/ListView, de úgy, hogy egyszerre lehessen scrollozni mind vertikálisan, mind horizontálisan. Tehát kb mintha egy térkép lenne. Hogy lehet megoldani ezt Androidban? Rengeteget bújtam a netet, de nem találtam rá megoldást.
-
WonderCSabo
félisten
Meg tudod csinálni programatikusan is, a custom View kosntruktorában:
class CustomEditText extends EditText {
public CustomEditText(Context context, AttributeSet attrs) {
super(new ContextThemeWrapper(context, R.style.your_style), attrs);
}
}Így minden CustomEditText példány a te stílusoddal fog rendelkezni alapból.
-
WonderCSabo
félisten
Hmm, ezt még nem próbáltam ki. Itt a styles.xml. Az EditText stílusát a Widget.TextView style adja meg. Csinálsz egy style-t, ami defeniálja ezek közül azt, amit kell, és beadod a custom view-dnak az android:style propertyn keresztül.
-
WonderCSabo
félisten
Nem, hiszem, hogy jó ötlet a VIew-t így az adatbázishoz kötni. A hivatkozást magát a programkódból változtatod meg, miért nem frissíted kódból egyszerűen a View-idat? Vagy egyszerűen hívsz rajtuk egy update-et, ami majd megint queryzik az adatbázisból a db modulodon kereszütl.
-
WonderCSabo
félisten
Mi ezzel a probléma? Csinálsz mondjuk egy custom view-t, ami mondjuk LinearLayoutból származik. Egy layout fájl tetejére berakoda custom view-t. Mindegyik Fragment ezt a layout filet inflateli, és a custom view alá berakja a saját űrlapját. Ezt még megdobhatod azzal, hogy csinálsz egy ősfragmentet, ami megcsinálja az előzőeket, és az eventekre is ráakaszkodik. A gyerek Fragmentek pedig berakják alá a saját űrlapot, az eventes függvényeik (add, update) pedig meghívódnak mivel az már az ősben kezelven van.
-
WonderCSabo
félisten
Igen, ebben az esetben ez egy járható út. A Builderben az opcinoális paramétereket is beállíthatod, hiszen részben ez is az előnye a konstruktorral szemben. [link] Egyébként nagyon sokan helytelenül hívják ezt Buildernek, ez valójában a Fleunt interface és a Builder egyfajta keveréke.
-
WonderCSabo
félisten
Ha egy Fragment állapotát vissza kell állítani, akkor a következő a szokásos:
public class MyFragment extends ListFragment {
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
// visszaállítod az állapotot
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// kimented az állapotot
}
}Ha az allápotot manuálisan kell kimenteni/visszaállítani, azt is megteheted:
Fragment.SavedState state = getFragmentManager.saveFragmentInstanceState(yourFragment);
// ez csak akkor műküdik, ha a FragmentManagerhez éppen csatolva van a Fragment
...
MyFragment fragment = MyFragment.newInstance();
fragment.setInitialSavedState(state); -
WonderCSabo
félisten
Na, én pont ebbe a hibába estem bele mielõtt kérdeztem.

A hszeidből sejtettem, hogy ezt szeretnéd, nem véletlenül írtam ezt a példát.

Illetve estem volna, ha az Eclipse engedi...
Már hogy ne engedné? Ez teljesen szabványos Java kód:
A.java
public class A {
public static A newInstance() {
return new B();
}
}B.java
public class B extends A {
} -
WonderCSabo
félisten
Szia!
Az absztrakt osztály a tervezés eszköze. Nyilván az absztrakt metódus egy előírás a gyerekek számára, amelyet teljesíteniük kell. De itt nem is erről van szó. Itt arra gondoltam, ha úgy írod meg az ősosztály implementációját, hogy számít arra, hogy ezt a gyerek a majd így fogja csinálni. Vagy még rosszabb, az osztály hívatkozik a gyerekire - például a newInstance egy gyerek példányt ad vissza.
-
WonderCSabo
félisten
A newInstance nehezen lehet közös, hiszen ha jól értem abból egy Fragment példánnyal térsz vissza. Továbbá a newInstance egy példányt ad vissza, méghozzá az adott osztályból egy példányt, akkor hogy lehetne az ősben, vagy bárhol máshol, mint a saját osztálya? Illetve még egy dolog: az OO szemléletben egy fontos dolog, hogy a szülőnek nem nagyon szabad tudnia a gyerekeiről... Ha valami közös működést akarsz a Fragment legyártása során, akkor azt tedd meg az ősosztály konstruktorában, és hívjál rá a gyerekekben super hívással. Ha ennél bonyolultabb kell, akkor válaszd az egyik linkelt megoldást, a statikus fv-t meg feletjtsd el ebben az esetben.
-
WonderCSabo
félisten
El lehet fedni a statikus metódusokat, ergó csinálhatsz olyat A.newInstance() egy A példányt adjon vissza, B.newInstance() pedig egy B példányt, de ennek sok előnye nem lenne, azon kívül, hogy egységesen kezeled a neveket. Hogyha öröklődést, és ezekhez kapcsolódó fogalmakat, működéseket, szeretnél, akkor felejtsd el a statikus függvényeket. Az abstract factory valóban jó ötlet arra, hogy ha a legyártást akarod kiszervezni. Itt egy nagyon egyszerű példa van leírva, és Javában megvalósítva, ebből tutira érthető lesz. De akár a Factory method is használható erre a célra. Sőt, a Builder is, bár a példák között talán ez a legbonyolultabb.
Szerk.: Egyébként ez a kérdés inkább a java programozás topikba tartozik. Sőt még akár az általános Programozás topikba is lehetne, mivel a patternek bmilyen nyelven műkődhetnek, de mivel a Java implementáció is érdekes, a Java topik lenne a legjobb.
-
WonderCSabo
félisten
válasz
unknownerror
#1415
üzenetére
Ha csak annyi a programnak a feladata, hogy megjelenítse a weboldalat, akkor egy WebView-val megteheted.
-
WonderCSabo
félisten
De akkor miért készít egy csomó példa expliciten public konstruktort? Az üres, public, alapértelmezett konstruktor nem készül el automatikusan az osztályhoz?
Amennyiben te magad deklarálsz konstruktort, akkor a default nem fog generálódni. Amennyiben nem deklarálsz semmilyen konstruktort, akkor igen.
-
WonderCSabo
félisten
válasz
WonderCSabo
#1156
üzenetére
Bocs kicsit elkapkodtam a választ és lejárt a szerkesztési idő. A linkelt cikk ugyanazt a célt szolgálja, de nem teljesen egyezik az általad mutatott mintával. Ez igazán pontosan a static factory method pattern. Ez a SO válasz szépen leírja az általános használatát. Ha picit mélyebbre akarsz menni, akkor olvasd el az Effective Java erre vonatkozó részét.
Fragmentekre levetítve pedig itt és itt magyarázat. -
WonderCSabo
félisten
Ne a rotation matrixot használd, hanem az getOrientation() metódust. Ez sokkal könyebben értelmezhető, lásd javadoc.
-
WonderCSabo
félisten
válasz
RexpecT
#1121
üzenetére
Ha picit tovább olvasol:
When a user searches or browses for applications using the Google Play application, the service compares the features needed by each application with the features available on the user's device. If all of an application's required features are present on the device, Google Play allows the user to see the application and potentially download it. If any required feature is not supported by the device, Google Play filters the application so that it is not visible to the user and not available for download.
-
WonderCSabo
félisten
válasz
szabi__memo
#1095
üzenetére
Magyarország kis ország, kevés fejlesztővel, így rohadtul nem érdekli a Googlet.
-
WonderCSabo
félisten
Valaki járt már el hasonlóan? Vagy valami mást használt ORM-hez?
Hogy rögzítve legyen a válasz erre a kérdésre:
Kettő libet próbáltam ki. Az egyik az ActiveAndroid. Ez lightweight, egyszerű, csak 16KB, és egyszerű, letisztult API-ja van. Hátránya az, hogy customizálni szinte egyáltalán nem lehet, csak a saját magának létrehozott táblákkal képes dolgozni, és viszonylag egyszerű lekérdezésekkel, amit a query builderével lehet írni.
A másik lib az ORMLite. Ez picit bonyolultabb, és picit többet kódot kell ahhoz írni, hogy az egyszerű példákat is megcsináld. Cserébe teljesen customizálható, azt a db-t használja amit Te megadsz neki, bármilyen queryt lehet írni, és sokkal több funkciója van, mint az előzőnek. Sajnos mindennek ára van, majdnem 300KB a lib. Illetve van még egy nagy előnye is, nem csak Android SQLite backendje van, hanem MySQL, Postgres, Microsoft SQL Server, H2, Derby, HSQLDB, és sima Sqlite. Így a megírt adatbázisos kód könnyen portolható más platformra.
-
WonderCSabo
félisten
válasz
negyedes
#1055
üzenetére
Attol, hogy egy parameter null, egyaltalan nem kovetkezik az, hogy a meghivott fv nullpointert is fog dobni miatta. Nezd meg a javadocot es/vagy forrast, es meglatod mi tortenik a fv-ben.
Az Adapteres temara: nem rossz a SimpleCursorAdapter, en is arra szavazok. Egyebkent azert nem a kedvencem. Ha nem nagyon sok vagy nagyon nagy objektumaiad vannak, sztem nyugodtan huzd be memoriaba, es egy ArrayAdaptert csinalj. mivel ugyis listat kezelsz.
-
WonderCSabo
félisten
válasz
negyedes
#1051
üzenetére
Hmm, lehet, hogy fáradt vagyok, de nekem ez most korrektnek tűnik. Ellenőrizd le, hogy jó táblából jó kulcsal akarsz-e törölni, és helyes értéket adsz-e át. A fv. visszatérési értékét nézted? Visszaadja, hogy hány sort törölt ki.
Az is megkönnyítené, ha egy SQLite manager progival megnyitod a db-det, és úgy ellenőrized le, hogy biztos az van-e benne, amit Te gondolsz. Ha internal storageban van a db, akkor ehhez persze először ki kell másolni externalra. -
WonderCSabo
félisten
Én ezt már csak azért nem javasolnám, mert a szomszéd pistika által is megírt injectiont sem védi ki.
Bár ha itt ha jól látom pont nem volt user input.(#1034) negyedes: Ha minden igaz az adapter minden egyes elemhez rendel egy View-t. Az adott sort csak akkor tudod eltüntetni, ha kiszeded a null elemeket az átadott listából.
Egy másik megoldás még az lehet, hogy csak elrejted a Viewt.public class YourAdapter extends ArrayAdapter<YourType> {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListView listView = (ListView) parent;
if (convertView == null) {
if (getItemViewType(position) == 0) { // not null
convertView = ...; // inflate list item view
} else { // null
convertView = new View(getContext());
convertView.setVisibility(View.GONE);
}
}
if (getItem(position) == 0) { // not null
... // update data of the reused list item view
}
return convertView;
}
@Override
public int getItemViewType(int position) {
if (getItem(position) != null) { // not null
return 0;
}
return 1; // null
}
@Override
public int getViewTypeCount() {
return 2; // not null, null
}
}Nem teszteltem ki, de működnie kell.
-
WonderCSabo
félisten
válasz
PandaMonium
#1031
üzenetére
Én is akartam mondani, de nem akartam udvariatlan lenni, szóval örülök, hogy megelőztél.

-
WonderCSabo
félisten
válasz
trisztan94
#1028
üzenetére
-
WonderCSabo
félisten
válasz
trisztan94
#1026
üzenetére
Nem feltétlenül kell clean. Igen, elvileg ennyi.
-
WonderCSabo
félisten
1. Ha már kilőtte az Activityt, akkor vagy az egész processzt, akkor nyilván már mindegy. A kilövés előtt lefutnak metódusok, pl. az Activity onStop, onDestroy fv-e, illetve az Application onTerminate fv-e.
Ha még nem lövi ki, de már érzi, hogy kevés a memória, akkor az onLowMemory, illetve az onTrimMemory meghívódhat. Nézd meg az Activity és az Application életciklus doksiban, hogy pontosabban mikor is hívódnak meg ezek. -
WonderCSabo
félisten
válasz
trisztan94
#1021
üzenetére
Belemásolod a .jar fájlt a libs mappába. A forráskódot tartalmazó másik jart semmiképpen ne másold be közvetlenül a lib mappába, mert ekkor az APK belerakja feleslegesen. Be lehet csatolni azért a forrást, de picit szarakodni kell.
-
WonderCSabo
félisten
válasz
trisztan94
#960
üzenetére
-
WonderCSabo
félisten
Sziasztok!
Használja vki közületek a Loader-eket SQLite adatbázissal? Alaposan meggyűlt a bajom egy ilyen problémával, SO-n feltettem a kérdést, aki esetleg használt már ilyesmit, légyszíves nézzen már rá.
Köszönöm! -
WonderCSabo
félisten
Igen, kapkodott választ adtam, fel se merült bennem, hogy db-nek így akar átadni negyedes, nem néztem meg a fv-t rendesen.
Egyébként én azt mondom, hogy vannak a db kezelésre androidon nagyon jó minták, pl. Pro Android könyvekben leírva, ha azokat használjátok fel akkor ilyen torzszülöttek nem lesznek egy bizonyos pontig. De sztem a sima androidos doksiban és van erre értelmes példakód, amit alapesetben felhasználva simán meg lehet csinálna az egyszerű db kezelő osztályt.
-
WonderCSabo
félisten
válasz
negyedes
#899
üzenetére
Mármint a Load() fv. meg sincs hívva sehol? Mivel ha jól látom ez egy statikus mezút inicializál, ezért sztem rakd be egy statikus inicializáló blokkba egyelőre. A Load() is legyen static mert csak statikus változókat babrál meg.
Tehát.
public class PatientData extends Context{
static String[] Names;
static String[] kep = { "Image 1", "Image 2" };
static {
Load()
}
public static void Load() {
...
}
}Így a Load() fv akkor hívódik meg amikor a PatientData class betöltődik, jellemzően az első hivatkozáskor rá.
-
WonderCSabo
félisten
válasz
negyedes
#896
üzenetére
Igen, az lesz a gond. Debugold be és nézd meg miért null a Names változó. Nyilván ott érdemes breakpointot berakni, ahol létre kéne jönnie a Names-nek. Egyébként csak így feltűnt, hogy tutira statikus változóban kéne ezt tárolni? Bár nem tudom pontosan milyen nevek ezek de van egy sanda gyanúm, hogy nem.
Illetve javás (és androids) névkonvenciókat tartsd be.
-
WonderCSabo
félisten
válasz
WonderCSabo
#874
üzenetére
Megnéztem most újra, én bénáztam el, jó a doksi.
-
WonderCSabo
félisten
Sziasztok!
Használ vki Google Play Services libet? Próbálom berakni a JavaDocot eclipsebe, de sehogy se sikerül. Pedig a google-play-services.jar.properties fájl elvileg alapból jól be van állítva. :S Próbálkozott vki ezzel?
-
WonderCSabo
félisten
válasz
negyedes
#866
üzenetére
Mármint egy java.util.List-ed? Ha az elemei String-ek, akkor úgy, hogy meghívod a toArray() metódusát. Ha elemei nem String-ek, akkor pedig pl.
String[] s = new String[list.size()];
int i = 0;
for (Object o : list)
s[i++] = o.toString();Ekkor nyilván csak a toString() metódusban meghatározott String reprezentációkat kapod meg.
-
WonderCSabo
félisten
Nem valósítja meg a Cloneable interfacet, nagyon helyes, ha nem engedi használni.
A clone() az object-ben van definiálva, de csak akkor lehet használni, ha a Cloneable interfacet megvalósítja az adott osztály, és korrektül felüldefiniálja a clone() metódust. Más esetben CloneNotSupported kivétel dobódik. De ez is le van írva a doksiban.

-
WonderCSabo
félisten
Sziasztok!
Láttátok, hogy megjelent az új fejlesztőkörnyezet, az Android Studio? Én kipróbáltam, sztem az Eclipse nagyon megveri...
-
WonderCSabo
félisten
válasz
CoolBoy323
#473
üzenetére
Sorry...
-
-
WonderCSabo
félisten
válasz
CoolBoy323
#467
üzenetére
Először programozni tanulj meg, úgy általánosságban, akár lehet az első nyelved a Java. Aztán picit a Javában is érdemes elmélyedni. Ha ezek a dolgok már mennek, akkor jöhet az Android.
-
WonderCSabo
félisten
Van egy App Inventor, amivel egyszerűen is lehet appokat csinálni, de ettől meg nyilván csodákat nem kell várni.
-
WonderCSabo
félisten
válasz
WonderCSabo
#360
üzenetére
Elnézést, picit félreolvastam, Ti nem magáról a JDK-ról beszéltek, hanem a VM-ről, amiből linuxra van Oracle JDK meg OpenJDK, eléggé megtévesztő módon. Igazából a kódbázis nagyrészben u.a., de az előbbi tartalmaz egy pár zárt forrású binárist. Én linuxon is az előzőt javasolom, gyorsabb, stabilabb. Igaz, hogy egy pár linuxos alkalmazás függősége az OpenJDK...
-
WonderCSabo
félisten
Sziasztok!
Üdvözlök az mindenkit a topikban, pár hete kezdtem el Android programozással foglalkozni.
Rögtön belevágok a közepébe:Egy tab layoutot szeretnék elkészíteni. Ehhez a fő classomat az ActivityGroupból származtatom le. Csak hogy ez a class már deprecated, és a Fragmentet stb. ajánlanak helyette. Ezt a tutorialt találtam hozzá, de meglehetősen túlbonyolítottnak találtam. Nincs lehetőség ennél egyszerűbb, tisztább módon egy tab layoutot elkészíteni nem depracated módon?
Előre is köszi!
Új hozzászólás Aktív témák
Hirdetés
- Apple iPhone 14 Pro 128 GB Deep Purple 100% akku
- Kingston A2000 250GB NVMe SSD
- GIGABYTE RX 6800 XT 16GB GDDR6 GAMING OC - Eladó!
- BESZÁMÍTÁS! ASRock A520M R5 5500 16GB DDR4 500GB SSD RX 5700XT 8GB Rampage SHIVA Seasonic 650W
- BESZÁMÍTÁS! MSI B450M R5 5600 16GB DDR4 512GB SSD RX 6650 XT 8GB Rampage SHIVA FSP 650W
- iPhone 13 128Gb 100%(1év Garancia)- ÚJ EREDETI AKKUMULÁTOR - AKCIÓ
- Cisco Catalyst C1000-48T-4G-L 48xRJ45 4xSFP switch
- HP Victus Gaming Laptop RTX 4070 / i7-13700H 16GB DDR5 1TB SSD Garancia
- iPhone 17 Pro 256 GB - Bontatlan !! www.stylebolt.hu - Apple eszközök - Számlás
- 350.000FT HELYETT! SzinteÚJ Ulefone Armor Pad 5 Ultra PROJEKTOROS KIB. KEMÉNY TABLET!!! 1.8kg
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest




