Wykorzystanie widżetu ListView
oraz wbudowanych fragmentów simple_list_item_1
oraz simple_list_item_2
do wyświetlania listy elementów.
package com.example.listviewexample import android.os.Bundle import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.ListView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Pobieranie referencji do ListView val listView: ListView = findViewById(R.id.listView) // Lista elementów do wyświetlenia val items = arrayListOf("Jabłko", "Banan", "Wiśnia", "Winogrono", "Pomarańcza") // Adapter do połączenia danych z ListView val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) listView.adapter = adapter // Obsługa kliknięcia na element listy listView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ -> val selectedItem = items[position] Toast.makeText(this, "Wybrałeś: $selectedItem", Toast.LENGTH_SHORT).show() } } }
Wyjaśnienie kodu
ListView
: Pobieramy referencję do widoku listy za pomocąfindViewById(R.id.listView)
ArrayAdapter
: Tworzymy adapter, który połączy listę tekstową zListView
onItemClickListener
: Obsługujemy kliknięcia na elementach listy, wyświetlającToast
Plik wyglądu
W pliku wyglądu należy dodać widok ListView
z identyfikatorem np. listView
, aby “połączyć go” z kodem powyżej.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
Wbudowane widoki wiersza
W Androidzie mamy dwa domyślne widoki wiersza: jednowierszowy i dwuwierszowy (tytuł i opis). Użycie ListView
zawsze wymaga zdefiniowania adaptera łączącego strukturę danych (np. tablicę wartości) z widokiem.
android.R.layout.simple_list_item_1
Widok ten służy do wyświetlenia jednego wiersza danych. Jest przeznaczony do prostych pól tekstowych. Używamy go, gdy dane do wyświetlenia to tylko pojedynczy ciąg znaków (np. lista nazw owoców).
Struktura XML (wbudowana, nie trzeba jej wkopiowywać)
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" android:textAppearance="?android:attr/textAppearanceListItemSmall" />
Użycie w kodzie
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) listView.adapter = adapter
android.R.layout.simple_list_item_2
Widok ten służy do wyświetlania dwóch wierszy danych: tekstu głównego (android.R.id.text1
- domyślnie większą czcionką) i tekstu dodatkowego (android.R.id.text2
- domyślnie mniejszą czcionką). Jest przeznaczony dla bardziej szczegółowych list (np. lista kontaktów z numerem telefonu).
Struktura XML (wbudowana, nie trzeba jej wkopiowywać)
<?xml version="1.0" encoding="utf-8"?> <TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItem" /> <TextView android:id="@android:id/text2" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" /> </TwoLineListItem>
Użycie w kodzie
Użycie tego widoku wymaga ArrayAdapter
z Map<String, String>
lub SimpleAdapter
.
val items = arrayListOf( mapOf("title" to "Jabłko", "subtitle" to "Czerwony owoc"), mapOf("title" to "Banan", "subtitle" to "Długi, żółty owoc") ) val adapter = SimpleAdapter( this, items, android.R.layout.simple_list_item_2, arrayOf("title", "subtitle"), intArrayOf(android.R.id.text1, android.R.id.text2) ) listView.adapter = adapter
Więcej informacji i źródła
- https://developer.android.com/reference/kotlin/android/widget/ListView
- opracowanie własne