Zoznam objektov
Zoznam – dáta z poľa
Najjednoduchší zoznam, ktorý môžeme v androide vytvoriť je zoznam, ktorý zobrazuje dáta z poľa. Na vytvorenie takéhoto zoznamu potrebujeme jeden XML súbor, ktorý bude obsahovať iba jeden widget – ListView, ktorý bude vložený do ľubovoľného kontajneru – napr RelativeLayout. Widget ListView v XML layout musí obsahovať atribúty id, atribúty pre nastavenie šírky a výšky.
V hlavnej triede MainActivity vytvoríme pole s objektami, ktoré chceme zobraziť v zozname. V metóde onCreate() vytvoríme inštanciu triedy ListView, ktoré prepojíme s listom z XML súboru (android:id), pomocou metódy setAdapter() nastavíme adapter, ktorý budeme používať. V tomto prípade použijeme adaptér ArrayAdapter, ktorý zobrazuje údaje z poľa. Alternatívou je použitie adaptéru CursorAdapter, ktorý sa používa pri zobrazení záznamov z databázy. Do parametrov adaptéra ArrayAdapter nastavíme context, XML vzhľad a objekt, ktorým naplníme zoznam. Keďže chceme zobraziť jednoduchý zoznam, ktorý zobrazuje iba jeden text v každom riadku, môžeme použiť štandartný XML layout pre zoznam, ktorý je zabudovaný v systéme android.R.layout.simple_List_item_1.
Metóda setOnItemClickListener() umožňuje vykonať nejakú akciu, po kliknutí na konkrétnu položku v zozname – v našom prípade, chceme, aby sa zobrazil text s krajinou, na ktorú klikneme – použijeme teda upozornenie – Toast.
Metóda setOnItemLongClickListener() sa volá v prípade, že podržíme prsty na konkrétnom riadku zoznamu. Ak vráti hondotu true, tak sa nezavolá metód setOnItemClickListener().
MainActivity.java
public class MainActivity extends AppCompatActivity {
String[] krajiny = {"Slovensko","Česko","Maďarsko", "Poľsko"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView mojZoznam = (ListView) findViewById(R.id.listview);
/*
* nastavenie adaptéra setAdapter()
* pre zobrazenie údajov z poľa, musíme použiť ArrayAdapter(),
* prvý parameter - context
* druhý parameter udáva, že chceme použiť štandartný XML layout, ktorý obsahuje jedno TextView v jednom riadku
* tretí parameter predstavuje objekty, ktoré chceme zobraziť pomocou listu
*/
mojZoznam.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, krajiny));
//metóda setOnItemClickListener() sa volá, keď chceme, aby sa niečo vykonalo po kliknutí na konkrétny riadok
mojZoznam.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(),krajiny[position], Toast.LENGTH_LONG).show();
}
});
//metóda setOnItemClickListener() sa volá, keď chceme, aby sa niečo vykonalo po podržaní prsta na obrazovke. V tom prípade sa nevolá metóda setOnItemClickListener()
mojZoznam.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), "podrzanie" + krajiny[position], Toast.LENGTH_LONG).show();
return true;
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="p_v.listviewpriklad.MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>