Wykorzystanie widżetu ListView oraz wbudowanych fragmentów simple_list_item_1 oraz simple_list_item_2 do wyświetlania listy elementów.
Kod w języku Kotlin
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()
}
}
}
Kod w języku Java
package com.example.listy;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
ListView listView;
// Lista elementów do wyświetlenia
ArrayList<String> items = new ArrayList<>(Arrays.asList("Jabłko", "Banan", "Wiśnia", "Winogrono", "Pomarańcza"));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
// Pobieranie referencji do ListView
listView = findViewById(R.id.lvShoppingList);
// Adapter do połączenia danych z ListView
var adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
listView.setAdapter(adapter);
// Obsługa kliknięcia na element listy
listView.setOnItemClickListener((parent, view, position, id) -> {
var selectedItem = items.get(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 – Kotlin
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) listView.adapter = adapter
Użycie w kodzie – Java
var adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items); listView.setAdapter(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 – Kotlin
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
Użycie w kodzie – Java
Użycie tego widoku wymaga ArrayAdapter z Map<String, String> lub SimpleAdapter.
List<Map<String, String>> items = new ArrayList<>();
items.add(new HashMap<String, String>() {{
put("title", "Jabłko");
put("subtitle", "Czerwony owoc");
}});
items.add(new HashMap<String, String>() {{
put("title", "Banan");
put("subtitle", "Długi, żółty owoc");
}});
var adapter = new SimpleAdapter(
this,
items,
android.R.layout.simple_list_item_2,
new String[]{"title", "subtitle"},
new int[]{android.R.id.text1, android.R.id.text2}
);
listView.setAdapter(adapter);
Więcej informacji i źródła
- https://developer.android.com/reference/kotlin/android/widget/ListView
- opracowanie własne