Image
30.6.2016 0 Comments

Vývoj pre Android – Databázová aplikácia SQLITE / 10. časť

Späť na úvod >> Späť na seriál

V predchádzajúcej časti sme ukázali vytvorenie databázovej vrstvy androidovej aplikácie využívajúcej internú databázu SQLite. V tejto časti doplníme databázovú aplikáciu o používateľské rozhranie.

Na úvod stručná rekapitulácia predchádzajúcej časti, ktorá sa dá zhrnúť do jediného príkazu SQL na vytvorenie databázovej tabuľky. Tento príkaz zároveň vysvetľuje jej návrhovú štruktúru.

CREATE TABLE knihy
(
_id INTEGER PRIMARY KEY AUTOINCREMENT,
autor TEXT,
kniha TEXT,
datum TEXT,
hodnotenie TEXT
);

Návrh používateľského rozhrania

Používateľské rozhranie budú tvoriť tri aktivity.

  • Hlavná aktivita - (na obrázku v strede) bude obsahovať zoznam kníh a tlačidlo na pridanie nového záznamu
  • Pridaj záznam (vpravo) - aktivita na pridanie nového záznamu
  • Edituj záznam (vľavo) - aktivita na editovanie, prípadne vymazanie záznamu

Kliknutím na položku na obrazovke hlavnej aktivity sa zobrazí aktivita na editovanie záznamu. V poliach EditView budú pri inicializácii aktivity vyplnené hodnoty atribútov editovaného záznamu.


Schéma prepojenia obrazoviek aktivít aplikácie

Podobne ako v predchádzajúcich kapitolách môžete používateľské rozhranie vytvoriť buď v návrhovom prostredí Android Studio, alebo priamo v definičnom súbore XML, prípadne kombináciou obidvoch metód. Aby ste mohli po pridaní každého prvku nastaviť jeho parametre vrátane textových reťazcov v súbore res/strings.xml, zadefinujte najskôr v tomto súbore všetky textové reťazce, ktoré bude aplikácia využívať.

Hlavná aktivita

V hlavnej aktivite zobrazíme pomocou prvku ListView záznamy a v záhlaví zobrazíme tlačidlo na pridanie nového záznamu. Keďže potrebujeme obrazovku aktivity vertikálne rozdeliť na dve časti, záhlavie a zoznam položiek, jednou z alternatív je layout TableLayout. Tabuľka je rozdelená na dve sekcie TableRow. V prvom úzkom riadku je názov zoznamu, v tomto prípade „Knihy", realizovaný ako prvok TextView a tlačidlo (prvok Button) na pridanie nového záznamu do čitateľského denníka. V druhom riadku, ktorý vypĺňa zvyšok obrazovky, je prvok ListView určený na výpis jednotlivých položiek.

droid1.jpg
Návrh používateľského rozhrania hlavnej aktivity

<TableRow
// ...nadpis a tlačidlo na pridanie záznamu
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</ListView>
</TableRow>

Na zobrazenie jednotlivých záznamov slúži prvok ListView. Na zobrazenie každej s položiek je využitý layout polozka.xml. Ten využíva koreňovy element typu TableRow. Prvok TextView na zobrazenie identifikátora sa nezobrazuje, ale musí byť súčasťou položky, aby po kliknutí na niektorý záznam bolo možné určiť jeho identifikátor.

public class MainActivity extends ListActivity
{
Intent intent;
TextView knihaId;
DataModeldm = new DataModel(this);

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<HashMap<String, String>> knihyHM =dm.dajZaznamy();

if(knihyHM.size()!=0)
{
ListView lw = getListView();
lw.setOnItemClickListener(new OnItemClickListener()
{
//kliknutie na polozku zoznamu
public void onItemClick(AdapterView<?> parent,
View view,int position, long id)
{
knihaId = (TextView) view.findViewById(R.id.knihaId);
String sKnihaId = knihaId.getText().toString();
Intent theIndent = new Intent(getApplication(),
EditujZaznam.class);
theIndent.putExtra("knihaId", sKnihaId);
startActivity(theIndent);
}
});
ListAdapter adapter = new SimpleAdapter( MainActivity.this,
knihyHM,
R.layout.polozka,
new String[] { "_id","autor", "kniha"}, new int[] {R.id.knihaId,
R.id.autorET, R.id.knihaET});
setListAdapter(adapter);
}
}

public void pridajKnihu(View view)
{
Intent theIntent = new Intent(getApplication(), PridajZaznam.class);
startActivity(theIntent);
}
}

Aktivity na pridanie a editovanie záznamu

Obrazovka aktivity obsahuje prvky EditView na zadávanie hodnôt atribútov a tlačidlo, ktorým sa potvrdzuje uloženie zadaných údajov.

droid2.png
Obrazovka aktivity na pridanie záznamu

Podobne ako aktivita na pridanie záznamu aj obrazovka tejto aktivity obsahuje prvky EditView na editovanie hodnôt atribútov. Pri inicializácii aktivity sú v týchto prvkoch hodnoty atribútov editovaného záznamu. Aktivita obsahuje dve tlačidlá - jedno, ktorým sa potvrdzuje uloženie zadaných údajov, a druhé na vymazanie aktuálneho záznamu.

Programovanie aplikačnej logiky

Aplikačnú logiku v tomto prípade tvorí kód troch aktivít

  • MainActivity.java
  • PridajZaznam.java
  • EditujZaznam.java

Všetky tri aktivity úzko spolupracujú s dátovým modelom v triede DataModel.

Hlavná aktivita

Pôvodne v kóde vygenerovanom pri vytváraní projektu je hlavná trieda aplikácie, v našom prípade trieda MainActivity, odvodená od triedy Activity. V tomto príklade treba zmeniť definíciu triedy a odvodiť ju od triedy ListActivity, pretože na stránke hlavnej aktivity sa bude vypisovať zoznam položiek pomocou prvku ListView.

public class MainActivity extends ListActivity

Údaje z databázy budú uložené v objekte typu ArrayList:

ArrayList<HashMap<String, String>> knihyHM = dm.dejZaznamy();

ArrayList sa naplní metódou triedy dátového modelu dajZaznamy(). Na obsluhu kliknutia na položku zoznamu vytvorte listener typu setOnItemClickListener a pridajte neimplementovanú metódu onItemClick().

Po kliknutí na položku sa z prvku TextView knihaId zistí unikátny identifikátor vybraného záznamu, teda atribút _id. Tento parameter sa pomocou objektu Intent odovzdá aktivite EditujZaznam. Tlačidlom Pridaj sa aktivuje metóda pridajKnihu, ktorá zobrazí aktivitu PridajZaznam.

Kompletný kód v súbore MainActivity.Java:

public class MainActivity extends ListActivity
{
Intent intent;
TextView knihaId;
DataModel dm = new DataModel(this);

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<HashMap<String, String>> knihyHM = dm.dajZaznamy();

if(knihyHM.size()!=0)
{
ListView lw = getListView();
lw.setOnItemClickListener(new OnItemClickListener()
{
//kliknutie na polozku zoznamu
public void onItemClick(AdapterView<?> parent,
View view,int position, long id)
{
knihaId = (TextView) view.findViewById(R.id.knihaId);
String sKnihaId = knihaId.getText().toString();
Intent theIndent = new Intent(getApplication(),EditujZaznam.class);
theIndent.putExtra("knihaId", sKnihaId);
startActivity(theIndent);
}
});
ListAdapter adapter = new SimpleAdapter( MainActivity.this,knihyHM,
R.layout.polozka,
new String[] { "_id","autor", "kniha"}, new int[] {R.id.knihaId,
R.id.autorET, R.id.knihaET});
setListAdapter(adapter);
}
}

public void pridajKnihu(View view)
{
Intent theIntent = new Intent(getApplication(), PridajZaznam.class);
startActivity(theIntent);
}
}

Aktivita na pridanie záznamu

Po potvrdení zadaných údajov sa vytvorí objekt HashMap obsahujúci hodnoty atribútov a tento objekt sa odovzdá metóde dátového modelu vlozZaznam(). Po pridaní záznamu sa dejstvo prenesie späť na hlavnú obrazovku.

Kód v súbore PridajZaznam.Java je skrátený len pre jeden atribút:

public class PridajZaznam extends Activity
{
EditText autorET;
DataModel dm = new DataModel(this);
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.pridaj_zaznam);
autorET = (EditText) findViewById(R.id.autorET);
}
public void pridajZaznam(View view)
{
HashMap<String, String> dotazHM = new HashMap<String, String>();
dotazHM.put("autor", autorET.getText().toString());
dm.vlozZaznam(dotazHM);
// vola MainActivity
this.aktivujMainActivity(view);
}
public void aktivujMainActivity(View view)
{
Intent ii = new Intent(getApplication(), MainActivity.class);
startActivity(ii);
}
}

 

Aktivita na editovanie záznamu

Aktivita prostredníctvom objektu typu Intent dostane od hlavnej aktivity ako parameter identifikátor záznamu, ktorý chce používateľ editovať, prípadne vymazať. Atribútmi záznamu sa naplnia prvky EditView. Aktivita obsahuje aj metódy na obsluhu udalostí ťuknutia na tlačidlá Zmeň a Vymaž.

Kód v súbore EditujZaznam.Java skrátený len pre jeden atribút:

public class EditujZaznam extends Activity
{
EditText autorET;

DataModel dm = new DataModel(this);

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.edituj_zaznam);

autorET = (EditText) findViewById(R.id.autorET);

Intent ii = getIntent();
String knihaId = ii.getStringExtra("knihaId");
HashMap<String, String> knihaHM = dm.dejZaznam(knihaId);

if(knihaHM.size()!=0)
{
autorET.setText(knihaHM.get("autor"));
}
}

public void editujZaznam(View view)
{
HashMap<String, String> dotazHM = new HashMap<String, String>();

autorET = (EditText) findViewById(R.id.autorET);

Intent ii = getIntent();
String sID = ii.getStringExtra("knihaId");

dotazHM.put("id", sID);
dotazHM.put("autor", autorET.getText().toString());
dm.aktualizujZaznam(dotazHM);
this.aktivujMainActivity(view);

}

public void vymazZaznam(View view)
{
Intent ii = getIntent();
String sID = ii.getStringExtra("knihaId");
dm.vymazZaznam(sID);
this.aktivujMainActivity(view);
}


public void aktivujMainActivity(View view)
{
Intent ii = new Intent(getApplication(), MainActivity.class);
startActivity(ii);
}

}

Nezabudnite obidve nové aktivity pridať v aplikačnom manifeste AndroidManifest.xml do zoznamu aktivít. Vo finále môžete aplikáciu otestovať. Pridajte niekoľko záznamov, skúste ich editovať a vymazávať.

 

Zobrazit Galériu
Autor: Marek Sopko

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Red Hat a Veracomp: Open source a cloudy

09.12.2016 12:05

Cieľom ďalšej z radu spoločných akcií firiem Red Hat a Veracomp Slovakia v Bratislave bola prezentácia produktov, služieb a stratégií týkajúcich sa najhorúcejších tém IT podpory biznisu s využitím naj ...

ITPro

Právne okienko

08.12.2016 12:02

1. Ako postupovať, ak obchodník nechce uznať reklamáciu tovaru objednaného z e-shopu? V takomto prípade môžu nastať v zásade dve situácie. Ak zákazník reklamuje tovar do 12 mesiacov od jeho kúpy, mož ...

ITPro

Red Hat Forum 2016: Otvorená digitálna transformácia

09.12.2016 11:51

Podujatím v Prahe pre región CENE (stredná a severná Európa) rezonovala komunitná atmosféra a snaha o spoluprácu podľa pravidla „každý s každým“. IT musí priniesť do digitálneho biznisu novú kultúru a ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá