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>

Zdrojový kód príkladu - tu stiahnuť.