Віджет ListView – часто застосовуваний елемент графічного інтерфейсу користувача в Android. Він дозволяє виводити ряд елементів на екран у вигляді прокручуваного списку. При натисненні на елементі списку, може виконуватися певна дія, наприклад, відкриття нової активності з додатковими деталями списку.
Задача
Вивисте список пристроїв. При натисненні певного пункту виводитиметься відповідне повідомлення.
1. Створюємо нову активність ListActivityЗадача
Вивисте список пристроїв. При натисненні певного пункту виводитиметься відповідне повідомлення.
2. Створюємо макет нашої активності activity_list.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: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="ua.kyiv.volodimirg.mylistapp.ListActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/mainListView"> </ListView> </RelativeLayout>
3. Пункти в списку можуть бути як простими текстовими, так і доволі складними і включати прапорці, текстові поля, радіокнопки і т.п. Щоб забезпечити це, нам потрібно створити для пункуту меню свій макет. Тому в папці res/layout cтворюємо простий макет з текстовим полем list_item.xml
<?xml version="1.0" encoding="utf-8"?> <!-- Вказуємо як виглядатими пункт списку --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip" android:textSize="16dip" android:textStyle="bold"> </TextView>4. Модифіковуємо активність ListActivity.
Необхідно
- Отримати посилання на наш ListView
mainListView = (ListView) findViewById( R.id.mainListView );- Створити список елементів в ArrayList
String[] devices = new String[] { "Планшет", "Мобільний телефон", "ПК", "Ноутбук", "Кардрідер", "Відеокарта", "Мишка", "Клавіатура"}; ArrayList- Створити адаптер, який бере на себе роботу із поєднання ListView із макетомdeviceList = new ArrayList (); deviceList.addAll( Arrays.asList(devices) );
// Створюємо ArrayAdapter, що використовує список пристроїв listAdapter = new ArrayAdapterВ даному випадку взятий стандартний ArrayAdapter, для більш складніших списків необхідно(this, R.layout.list_item, deviceList); // додаємо ще пристрої listAdapter.add( "Монітор" ); listAdapter.add( "Вінчестер" ); listAdapter.add( "Материнська плата" ); listAdapter.add( "Процесор" ); // встановлюємо ArrayAdapter адаптером для ListView. mainListView.setAdapter( listAdapter );
створити свій адаптер для роботи із списком.
Обробку натиснення на пункт реалізується стандартно через реалізацію анонімного класу:
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView parent, View view, int position, long id) { // selected item String product = ((TextView) view).getText().toString(); Context context = getApplicationContext(); int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, product, duration); toast.show(); } });
Замість виведення повідомлення, можна запустити другу активність передавши їй натиснений пункт.
Повний код ListActivity.java
package ua.kyiv.volodimirg.mylistapp; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.Arrays; public class ListActivity extends AppCompatActivity { private ListView mainListView; private ArrayAdapterlistAdapter ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); //отримуємо наш список mainListView = (ListView) findViewById( R.id.mainListView ); // створюємо список пристроїв String[] devices = new String[] { "Планшет", "Мобільний телефон", "ПК", "Ноутбук", "Кардрідер", "Відеокарта", "Мишка", "Клавіатура"}; ArrayList deviceList = new ArrayList (); deviceList.addAll( Arrays.asList(devices) ); // Створюємо ArrayAdapter, що використовує список пристроїв listAdapter = new ArrayAdapter (this, R.layout.list_item, deviceList); // Додаємо більше пристроїв. listAdapter.add( "Монітор" ); listAdapter.add( "Вінчестер" ); listAdapter.add( "Материнська плата" ); listAdapter.add( "Процесор" ); // встановлюємо ArrayAdapter адаптером для ListView. mainListView.setAdapter( listAdapter ); mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView parent, View view, int position, long id) { // selected item String product = ((TextView) view).getText().toString(); Context context = getApplicationContext(); int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, product, duration); toast.show(); } }); } }
Джерела:
A Simple Android ListView Example
Android ListView
Using lists in Android wth ListView – Tutorial