суботу, 27 січня 2018 р.

Простий ListView (Android)

Віджет 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 deviceList = new ArrayList();
deviceList.addAll( Arrays.asList(devices) );
- Створити адаптер, який бере на себе роботу із поєднання ListView із макетом
 
// Створюємо ArrayAdapter, що використовує список пристроїв
listAdapter = new ArrayAdapter(this, R.layout.list_item, deviceList);
// додаємо ще пристрої
listAdapter.add( "Монітор" );
listAdapter.add( "Вінчестер" );
listAdapter.add( "Материнська плата" );
listAdapter.add( "Процесор" );
 
// встановлюємо ArrayAdapter адаптером для ListView.
mainListView.setAdapter( listAdapter );
В даному випадку взятий стандартний ArrayAdapter, для більш складніших списків необхідно
створити свій адаптер для роботи із списком.

Обробку натиснення на пункт реалізується стандартно через реалізацію анонімного класу:

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 ArrayAdapter listAdapter ;
    @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

Немає коментарів:

Дописати коментар