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

Gyorskeresés

Android alkalmazásfejlesztés 1. rész: számológép

Szeretnélek elkalauzolni titeket az Android alkalmazásfejlesztés alapjaiba egy egyszerű példán keresztül.

[ ÚJ TESZT ]

Java oldal

Ahogy a cikk elején említettem, nem fogok kitérni különböző programozásbeli kérdésekre, programozástechnikai dolgokra. Felületesen érintjük a Java nyelvet, ha valaki komolyabban szeretne Android programozással foglalkozni, akkor a Java fejlesztés elsajátítása az első lépés.

Mivel automatikusan legenerálódott az osztályunk, ezzel már nem kell foglalkoznunk.
A generált osztálynak valahogy így kell kinéznie:

Létrejött az első (és ebben a projektben az egyetlen) Activity.
Ismét egy új fogalom.
Az Activity-k az alkalmazáskomponensek, azok a részek, amin a felhasználó interakciót hozhat létre a funkciók eléréséhez. Egy alkalmazás általában több Activity-t tartalmaz, amik csak lazán kötődnek egymáshoz. Egy-egy interakció másik és másik Activity-re vezethet. Amikor elindul egy új Activity, az előtte lévő megáll és hátrarakja a rendszer. Ez egy klasszikus LIFO (Last In, First Out) sorozat.

Az onCreate metódusban jön létre a GUI, amit az előbbiekben készítettünk, tehát ha most futtatjuk az appot, mindössze megnyitja a GUI-t, de semmi felhasználó interakció nincs kezelve.

Kezdjük törni a fejünket, milyen működésre van szükségünk.

Szükség lesz megvizsgálni az operátorokat, hogy számról van-e szó, valamint az eredményt is be kell kérni, ki kell íratni valamilyen módon.

Nos, eddig ez sima Java. Két String Set, ami fel van töltve a megnyomható gombokkal, ugyebár ezeket kell majd ellenőrizni.

Innentől nem képekben fogom mutatni az előrehaladást, hanem szövegként, hogy másolható legyen.

Itt az ideje megismerkedni a következő lépéssel. Hogyan kérjük be a TextView értékét? Nagyon egyszerűen. Egy TextView objektum létrehozása után ID alapján nagyon egyszerűen megkereshető az adott View.

private TextView result;
result = findViewById(R.id.result);

Ezzel az OnCreate metódusunk készen is van!
Igaz ezek csak nekünk fontosak a felhasználó interakciók továbbra sincsenek kezelve. A layout létrehozásánál megadtunk az elemeknek egy android:onClick="handleClick" attribútumot.

Ezt fogjuk most használni! Létrehozzuk a megadott metódust, ami itt ugyebár handleClick.

public void handleClick(View view) { //TODO }

Első lépésben ki kell találni, hogy egyáltalán melyik gombot nyomta meg a user. Szerencsére ez is egyszerűen megoldható!

public void handleClick(View view) {
Button clicked = (Button) view;
String value = clicked.getText().toString();


result.setText(value);
}

No, hát ez máris valami! Lekérjük az adott gomb értékét és beleírjuk a result változó Text attribútumába. Ergo, ha most futtatjuk az alkalmazást, akkor szépen megjelennek az adott gombok értékei a TextView-ban!
Most pedig el kell dönteni, hogy a megnyomott gombra mit is kell csinálni. Lényegében 4 fontos momentum lehet. A törlés (CE) gomb megnyomása.

public void handleClick(View view) {
Button clicked = (Button) view;
String value = clicked.getText().toString();

if (value.equals("CE")) {
value = "";
}

result.setText(value);
}

Valamint a szám, az operátor és az eredmény lekérdezése.

Ahogy az elején is figyelmeztettem mindenkit, egy nagyon egyszerű alkalmazás készül, így a kód is viszonylag egyszerű, de legalább annyira nem valós életbe szánt.

Következő lépés a számok leütése. Ellenőrizzük, hogy szám gombot nyomott-e meg a felhasználó. Amennyiben igen, akkor azt beírjuk az előzőleg a TextView-ban hagyott dolgok után.

public void handleClick(View view) {
Button clicked = (Button) view;
String value = clicked.getText().toString();

if (value.equals("CE")) {
value = "";
} else if (numbers.contains(value)) {
value = result.getText().toString() + value;
}

result.setText(value);
}

Szuper! Akkor most keressük meg, hogy operátor-e!

public void handleClick(View view) {
Button clicked = (Button) view;
String value = clicked.getText().toString();

if (value.equals("CE")) {
value = "";
} else if (numbers.contains(value)) {
value = result.getText().toString() + value;
} else if (operators.contains(value)) {
operand = result.getText().toString();
operator = value;
}

result.setText(value);
}

Na, hát ez se volt nehéz, ugye? A következő lépés meg már egyenes favágás ezek után. Egy kis összegzés, jelenleg tudjuk vizsgálni, hogy a felhasználó a CE gombot nyomta-e meg. Ebben az esetben töröljük a TextView tartalmát. Ha a felhasználó egy számot nyomott meg akkor a szám értékét String-ként hozzáadjuk a TextView-hoz. (Gy.K.: 5+6 nem 11 hanem 56). Valamint, ha operátorral lépett interakcióba a User, akkor pedig kimentjük az eddigi számot és lementjük az adott operátort is. Ha megvan az egyik szám és az operátor, már csak a másik számra van szükségünk. Az egyszerűség érdekében feltételezzük, hogy nem nyomkodja végig a felhasználó az operátorokat és következőleg csak számot ír, majd megnyomja az egyenlőségjelet.

public void handleClick(View view) {
Button clicked = (Button) view;
String value = clicked.getText().toString();

if (value.equals("CE")) {
value = "";
} else if (numbers.contains(value)) {
value = result.getText().toString() + value;
} else if (operators.contains(value)) {
operand = result.getText().toString();
operator = value;
} else {
double a = Double.parseDouble(operand);
double b = Double.parseDouble(result.getText().toString().substring(1, result.getText().toString().length()));

if (operator.equals("+")) {
value = Double.toString(a + b);
} else if (operator.equals("-")) {
value = Double.toString(a - b);
} else if (operator.equals("*")) {
value = Double.toString(a * b);
} else if (operator.equals("/")) {
value = Double.toString(a / b);
}

operator = null;
operand = null;
}

result.setText(value);
}

Tehát, mivel az első szám már megvan, mindössze csak számmá kell konvertálnunk. Az operátor is megvan, neki csak meg kell vizsgálni, hogy melyik és az adott műveletet végrehajtani. A másik szám pedig értelemszerűen be van írva és mindössze csak az első karaktert, ami az operátor, kell levágnunk a TextView értékéből substring() segítségével.

Ezzel pedig el is készült az alkalmazásunk!

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.