В этом небольшом примере хочу вам показать как работать с 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
17 комментариев к статье "Как работать с ListView в Android?"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Спасибо за урок, а как сделать так, чтоб при клике открылось имеющийся активити. Заранее благодарю
Вместо
Toast.makeText
вызывайте вашу Activity, Как вызвать активити можно посмотреть тут: http://devcolibri.com/418А как вывести при нажатии название пункта меню?
Уточнение. В случае когда вместо массива используется ArrayList
Ну преобразовать ArrayList в массив не составит труда.
Нужно слушателя на компонент поставить.
Спасибо за урок! Присоединяюсь к вопросу про вызов новой 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. Сам не ожидал, но работает.
Что именно вписывать там где “OneActivity”
Все разобрался ) Я тебя обожаю!!! я эту информацию очень долго искал!
Александр спасибо.. ето урок отлично добавиляет видеоурок п листактивити на ютубе. Круто что показали пример с custom_list_itemб мне было ранее не совсем понятно что ето за параметр.
Здравствуйте Александр, у меня вопрос.
Я использую 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″}. Вопрос, как получить от адаптера одно из значений кликнутого пункта по атрибуту?
Заранее спасибо.
В Вашем слечае – String s – это массив строк, попробуйте по идентификатору массива получить нужное значение.
вот я вместо Toast.makeText поставил Intent переход на страницу, но как сделать так чтобы по разным страницам перешла а не одну страницу на все списки
Пожалуйста подскажите, как увеличить расстояние между элементами списка?
Спасибочки за эт: parent.getAdapter().getItem(position),