Как работать с ListView в Android? – Devcolibri

Как работать с ListView в Android?

В этом небольшом примере хочу вам показать как работать с ListView и вешать на него обработчики.

Шаг 1

Создадим Android проект File->New Project->Android Module:

И в layout добавим новый main.xml, на него добавим ListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <ListView
            android:id="@+id/lvMain"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

ListView – это список элементов.

Шаг 2

Заполнять этот список мы будем при помощи адаптера.

Создаем в src/MainActivity.java и в нем создаем наш адаптер:

package com.example.AndroidListViewExample;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    // элементы списка которые будут в него внесены
    String[] colors = { "Красны", "Оранжевый", "Желтый", "Зелёный", "Голубой", "Синий", "Фиолетовый"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Связываемся с ListView
        ListView list = (ListView) findViewById(R.id.list);

        // создаем адаптер
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                                           (this, android.R.layout.simple_list_item_1, colors);

        // устанавливаем адаптер списку
        list.setAdapter(adapter);
    }
}

android.R.layout.simple_list_item_1 – это системный layout-файл, который представляет собой TextView.

Шаг 3

Запускаем и смотрим результат:

Как видите все элементы массива вывелись в список.

Шаг 4

Давайте немного кастомизируем элементы списка.

Создадим layout custom_list_item.xml в папке res/layout нашего проекта:

<?xml version="1.0" encoding="utf-8"?>
<TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="5dp"
        android:text="TextView"
        android:background="#2ECC71"
        android:textColor="#FFFFFF"
        android:textSize="24sp">
</TextView>

Изменим существующий код, укажем адаптеру наш созданный layout-ресурс custom_list_item:

// создаем адаптер
ArrayAdapter<String> adapter = new ArrayAdapter<String>
                                   (this, R.layout.custom_list_item, colors);

Смотри как это будет выглядеть:

Шаг 5

Теперь давайте добавим обработчик на клик по одному из элементов списка.

Для этого допишем ClickListener для нашего списка:

// Обработка события на клик по элементу списка
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(getApplicationContext(), "itemClick: position = " +
                position + ", id = " + id + ", " + parent.getAdapter().getItem(position),
                Toast.LENGTH_SHORT).show();
    }
});

И после клика, это выглядит так:

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

43025
28/05/2013

17 комментариев к статье "Как работать с ListView в Android?"

  1. Спасибо за урок, а как сделать так, чтоб при клике открылось имеющийся активити. Заранее благодарю

  2. А как вывести при нажатии название пункта меню?

  3. Спасибо за урок! Присоединяюсь к вопросу про вызов новой Activity, но как сделать так, чтобы для каждого пункта списка вызывалась своя отдельная Activity? Заранее спасибо

    • Здравствуйте! Вам нужно заране установить элементы списка, Иначе если список генерируется автоматически то такое сделать не получится. А так как элементы списка статично указаны то ничего не мешает на каждый повешать OnItemClickListener и в зависимости от позиции (там будет параметр в методе position) выполнять действие открытия Activity. Как запускать Activity рассказанно тут http://devcolibri.com/418/.

    • Я сделал через метод if else if
      lvlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView parent, View itemClicked, int position,
      long id) {
      if (position==0){
      Intent intent = new Intent(OneActivity.this, MenuActivity.class);
      startActivity(intent);
      }
      else if (position==1){
      Intent intent = new Intent(OneActivity.this, MainActivity.class);
      startActivity(intent);
      }
      Для каждой position устанавливаешь значение, начиная с 0. Сам не ожидал, но работает.

  4. Александр спасибо.. ето урок отлично добавиляет видеоурок п листактивити на ютубе. Круто что показали пример с custom_list_itemб мне было ранее не совсем понятно что ето за параметр.

  5. Здравствуйте Александр, у меня вопрос.
    Я использую SimpleAdapter, передаю ему данные с помощью ArrayList<Map>. В каждый пункт списка передается 3 значения (2 – тексты для TextView и 1 – id изображения для ImageView). В обработчике OnItemClickListener я могу получить содержимое кликнутого пункта (String s = parent.getAdapter().getItem(position).toString();) но такой способ записывает в s что-то типа {textАttribut1=”text1″, textАttribut2=”text2″, imageАttribut3=”01234567890″}. Вопрос, как получить от адаптера одно из значений кликнутого пункта по атрибуту?
    Заранее спасибо.

  6. вот я вместо Toast.makeText поставил Intent переход на страницу, но как сделать так чтобы по разным страницам перешла а не одну страницу на все списки

  7. Пожалуйста подскажите, как увеличить расстояние между элементами списка?

  8. Спасибочки за эт: parent.getAdapter().getItem(position),

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)