Android Studio Listview

23 Мая 17:21

Ни одно приложение, запрашивающее набор данных и возвращающее результаты, не обходится без отображения списка. Возьмем мессенджер или контактную книгу, в них контакты отображаются в виде списка. В Android такие прокручиваемые списки создаются и оформляются виджетом ListView. Работать с listview в андроидстудио удобней всего. Что такое androidstudio, вы можете узнать, перейдя по ссылке.

Android Studio Listview: оформление списка, примеры

ListView: что это

Android ListView – способ представления элементов, в котором результаты отображаются в виде списка с вертикальной прокруткой. Функционирует androidstudiolist по следующему принципу – адаптер извлекает из источника содержимое и автоматически вставляет в androidstudio список.

Источником данных выступают базы данных и массивы. Можно создать следующие андроидстудио виды списков: с собственной разметкой, динамически заполняющиеся, androidstudiolistview многоуровневый, с элементами прослушивания событий и т.д.

ListView на примере телефонной книги
ListView на примере телефонной книги

Адаптеры – заполнение списка данными

В аndroidstudiolistview оформление списка и его заполнение происходит благодаря «адаптерам». Основное их задание - связь информации с перечнем. В ОС Андроид работать с ListView можно с помощью адаптеров: первый –ArrayAdapter, второй – CursorAdapter. Второй управляет данными из базы данных. ArrayAdapter регулирует содержимое перечней и массивов.

Адаптеры действуют в качестве посредников между источником информации и ListView
Адаптеры действуют в качестве посредников между источником информации и ListView

За создание индивидуального адаптера отвечает абстрактный класс BaseAdapter. Индивидуальные адаптеры могут понадобиться, когда требуется организовать недостающий контроль над представлениями или управление сведениями. Также в индивидуальном адаптере предусматривают компоненты, отвечающие за кэширование, повышающие производительность функционала.

В качестве основных приемов адаптера выступают getCount() и getView(). С помощью первого метода можно узнать, сколько объектов будет выводиться. Второй метод отвечает за создание элементов списка. Вызывается getView() для каждого элемента, определяя, что отображать нужно, а что нет. Повторное использование существующих элементов можно выставить с помощью параметра convertView, который содержится в getView().

Пользовательская разметка

Для придания оригинальности списку нужно системную разметку заменить на пользовательскую, но для этого ее необходимо создать и подключить. Перейдите в категорию res/layout/ и создайте в категории файл под названием list_item.xml. Listviewandroidstudio пример с собственной разметкой:

<?xml version=”1.0” encoding=“utf-8”?>
<TextView
xmlns:android=”http://schemas.android.com/apk/res/android”
            android:layout_width=”match_parent”
            android:layout_height=”match_parent”
android:padding=”10dp”
android:textColor=”#02FF10”
android:textSize=”16sp”
android:textStyle=”bold”>
</TextView

android studio list
Выставление цвета, отступа, размера шрифта и т.д.

Когда необходимо добиться изменения в androidstudiolistview оформление, к примеру, выставить цвет при нажатии, то для родительского компонента прописывают следующую композицию знаков – android:background="?android:attr/ activatedBackgroundIndicator". В TextView возможна настройка практически всех параметров. Единственным исключением является характеристика Text, так как ее указывают в виде компонента ListView автоматически. Для подключения своей разметки останется изменить одну строчку в коде, вместо системной разметки поставить свою.

ArrayAdapter<String> adapter = new
ArrayAdapter<String> (this, R.layout.list_item, cityNames)
listview android studio примеры
Подключение собственной разметки

Динамическое заполнение списка

Чтобы заполнить список, пользователю следует внести в пустой список новые компоненты. К примеру, расположим на экране поле, в которое в дальнейшем пользователь будет вводить известные ему города, набирая текст с клавиатуры. При нажатии кнопки Enter введенное название города сразу фиксируется в динамическом списке. За моментальное обновление списка отвечает адаптер, а за хранение данных – массив.

protected void onCreate(Bundle savedlnstanceState) {

super.oncreate(savedlnstanceState);

setContentView(R.layout.activity_main);

//получаем экземпляр элемента Listview

ListView listView = (ListView) findviewById(R.id.listView);

final EditText editText = (EditText) findviewByid(R.id.editText);

//cоздаём пустой массив для хранения названий городов

final ArrayList<String> cityNames = new ArrayList<();

//создаём адаптер ArrayAdapter, чтобы привязать массив к ListView

final ArrayAdapter<string> adapter;

adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, cityNames);

//привяжем массив через адаптер к Listview

listView.setAdapter(adapter);

//прослушиваем нажатия клавиш

editText.setOnKeyListener(new View.OnKeyListener(){
    public boolean onKey(view v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.action_down)
             if (keycode == KeyEvent.keycode_enter) {
                    cityNames.add(0, editText.getText().toString());
                    adapter.notify0atasetchanged();
                    editText.setText("");
                    return true;
              }
               
               return false;
         }

    });

}
android studio listview
Пример кода заполнения пользователем списка городов

Собственно говоря, данный код можно взять за основу для чата. Пользователь пишет текст, который потом отображается в списке. Чтобы получить полноценное приложение, необходимо настроить запись текста от другого абонента и добавление в этот же список.

android studio список
Реализация кода заполнения пользователем списка городов

Прослушивание событий элемента ListView

Компонент ListView генерирует множество событий, на некоторые из них необходимо реагировать, в частности, это события, возникающие после клика на объекте из списка. Обеспечивают эти цели такие методы: OnItemClick и setOnItemClickListener.

Все данные, необходимые, чтобы определить компонент, нажатый в перечне, передаются именно в метод onItemClick() . В примере ниже реализовано всплывающее сообщение с текстовой информацией, которое возникает после нажатия на любой раздел из перечня.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent,

View itemClicked, int position, long id) {

Toast,makeText(getApplicationContext(), <p></p>

((TextView) itemClicked),getText(),

Toast.LENGTH_SHORT).show();

}

});
android studio listview многоуровневый
Код события: нажатие на элемент списка

Программное нажатие на элемент списка

Под программным нажатием подразумевается создание кнопки и задание события, которое будет осуществлено после клика по кнопке. Обычно кодировка выходит немного громоздкой, однако, в целом, работает без багов.

public void onClick(View view) {
 
int activePosition = 0; // первый элемент списка

listView .р erformItemClick(listView .getAd ap te().

    getView (actin'Position, null, null), activePosition, listView.getAd apte().

    getItemId (activePosition));
}
listview в андроид студио
Пример кода для щелчка

ListView не реагирует на щелчки

Бывают такие случаи, когда после щелчка на категориях меню ничего не происходит, даже несмотря на то, что в коде все необходимые методы стоят, и визуально ошибок не видно. Что предпринять?

Первое – проверить, нет ли в компоненте перечня CheckBox. Если содержит, то глюк заключается в нем, ведь у него имеется индивидуальный слушатель щелчков. Исправить такую ситуацию довольно легко, необходимо избавиться от фокуса.

Также иногда помогает перемещение метода OnItemClickListener. Только делать это нужно перед тем, как устанавливается адаптер.

Второе – если в компоненте перечня содержится TextView и используется параметр android:inputType="textMultiLine", его меняют на android:minLines/android:maxLines. Не помешает проверить наличие характеристики android:autoLink, если таков есть, то его следует удалить.

Если проблемы остались, значит, причина в ImageButton. Установите фокус в false.

//Удаление в Checkbox фокуса

android:focusable=”false”

android:focusableInTouchMode=”false”

//Установка в ImageButton фокуса в false

ImageButton imageButton = (ImageButton)

convertView.findViewById (R. id. imageButton);

imageButton.setFocusable (false);
android studio listview оформление
Заставляем ListView реагировать на нажатия

Настраиваем внешний вид ListView

Чтобы список выглядел более привлекательно, необходимо воспользоваться встроенными атрибутами. Для задания высоты разделителя используется атрибут dividerHeight. Для задания самого графического разделителя используется атрибут divider.

В качестве разделителя можно установить не только цвет, но и картинку. Загружать следует картинки формата png и фиксировать файл в качестве drawable-ресурса. Таким образом можно избежать множества ошибок.

<colorname="reddivider,,>#FFOOOO</color>

<dimen name=ntwodp">2dp</dimen>


Присваиваем созданный ресурс атрибуту divider, а также задаем в dividerHeight высоту:

<ListView

android:id="@+id/listViewl"

android:layout_width=”match_parentn”

android:layout_height="wrap_contentn”

android:divider="@color/reddivider”

android:drviderHeight="@dimen/twodp">

</ListView>
андроид студио виды списков
Пример настройки внешнего вида списка

Подсветка нажатий

Для начала необходимо создать в папке Resources > drawable файл ViewCellBackground.xml, который будет определять фигуры с цветами для состояния по умолчанию, а также состояния «нажатого» элемента. В файл вписываем строчку:

<?xml version="1.0" encoding="UTF-8"?>

Далее используем унаследованный класс для View:

public class TouchableStackLayout: StackLayout

{

}

После для этого класса реализуем пользовательский рендерер, для этого устанавливаем фоновый ресурс:

 public class ElementRenderer: VisualElementRenderer

{
  protected override void OnElementChanged(ElementChangedEventArgs e)
    
  {
    
    SetBackgroundResource(Resource.Drawable.ViewCellBackground);
        
    base.OnElementChanged(e);
    
  }}

Если для существующего UIView не работает установка фонового цвета, то можно попробовать после установки цвета фона вызвать SetNeedsLayout.

Android Studio Listview: оформление списка, примеры
Результат выполнения кода

Пользовательский селектор

Автоматический элемент перечня при выборе выделен цветом. Выделение можно сделать более оригинальным. Воспользуйтесь параметром android:listSelector. Все что необходимо сделать, это подобрать подходящую селектору текстуру и привязать ее через ресурс.

<selectorxmlns:android=”http://schemas.android.com/apk/res/android”>

<item android:state_pressed=”true” android:drawable=”@drawable/bground,”/>

</selector>

Для подсвечивания элемента списка сразу после запуска приложения нужно использовать связку следующих методов:

listView.requestFocusFromTouch();

listView.setSelection(3); //выбираем 4 пункт списка
Android Studio Listview: оформление списка, примеры
Применение пользовательского селектора

Множественный выбор

Выборку сразу нескольких пунктов можно настроить через два основных способа установки. Первый – через метод setChoiceMode(ListView.CHOICE_MODE_MULTIPLE). Второй – с помощью параметров ChoiceMode. Установите значение multiplyChoice, атрибут android:choiceMode="multipleChoice". Посмотрев tutorial, вы сможете с легкостью разобраться с этим моментом.

Кнопка под списком

Для размещения под перечнем клавиши, на которую не будет влиять количество пунктов в androidstudiolistview, воспользуйтесь layout_weight.

<?xml version="1.0” encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android :lavout_height="match_parent"

and roid: orientation="vertical" >

<ListView

android :id="@+id/listViewl"

and roid :layout_wid th="match_parent"

android:layout height="Odp"

and roid :layout_weight="l" >

</ListView>

<Button

android:id="@+id/buttonl"

android:layout_width="wrap_content"

android:layout height="wrap_content"

android: lavout_weight="0"

and roid :text="Button" />

</LinearLavout>
Android Studio Listview: оформление списка, примеры
Листинг размещения кнопки под списком

Плавная прокрутка в начало списка или любую позицию

Для реализации плавной прокрутки применяется метод smoothScrollToPosition(), в котором для прокрутки указывается номер позиции. Перед использованием данного метода следует учесть, что в списках с большим количеством элементов, более сотни, процесс прокрутки может затянуться. Так что лучше этот способ отложить для более мелких списков.

ListView listView = (ListView)

findViewById(R.id.listView);

int n = 0; // прокрутка до начала

listView.smoothScrollToPosition(n);
Android Studio Listview: оформление списка, примеры
Пример кода плавной прокрутки в начало списка

Настраиваем прокрутку

Полосы прокрутки можно настроить по своему усмотрению. Для этих целей в ListView имеются два атрибута, которые также можно применить к полосам EditText и ScrollView.

android:scrollbarThumbVertical=”@drawable/scroll”

android:scrollbarTrackVertical=”@drawable/scrool_bg”.
Android Studio Listview: оформление списка, примеры
Атрибуты, отвечающие за полосу прокрутки

ListActivity

ListActivityнезаменим для упрощенного доступа к компонентам перечня. Это системный раздел, который разработан на основе Activity для эффективного взаимодействия с перечнями. Создать перечни не составит особого труда.

Для этого сначала нужно сделать новый проект. После необходимо найти и удалить activity_main.xml, так как ListActivity, не нуждается в дополнительной разметке. Кликаем по java-файлу и вручную стираем setContentView (R.layout.activity_main). Далее следует известить систему о том, что будет использован экран с перечнем.

Внесите изменения в ячейку publicclass Ваше Название ActivityextendsAppCompatActivity, вместо AppCompatActivity пишем ListActivity. В import вы увидите две строчки, одну из них можно стереть.

import android.app.ListActivity;

import android.app.Activity;
Android Studio Listview: оформление списка, примеры
Удаляемая строка

Следующим шагом является подготовка сведения для перечня, для их дальнейшего отображения. В качестве места хранения данных выбираем массив и переходим к его формированию.

final String[] peopleNamesArray = new String[] {“Иван”, ”Дмитрий”, ”Андрей”, ”Николай”, ”Олег”, ”Геннадий”};
Android Studio Listview: оформление списка, примеры
Формирование и заполнение массива

Переходим непосредственно к созданию экрана, куда включен перечень, а также самих слов для этого перечня. Справиться с этой задачей поможет адаптер данных.

new ArrayAdapter(Context context, int textViewResourceId, String[] objects)
Android Studio Listview: оформление списка, примеры
Определение адаптера данных для работы с массивами строк

Далее предлагаем адаптеру только что сформированный массив, ресурсный идентификатор и ListActivity. Последний выполняет роль текущего контекста. Завершающий этап – подключение.

private ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedlnstanceState) {
super.onCreate(savedlnstanceState);
mAdapter = new ArrayAdaptero(this,
android. R. layout. simplelistiteml, catNamesArray);
}
Android Studio Listview: оформление списка, примеры
Работа с адаптером
setListAdapter(mAdapter);
Android Studio Listview: оформление списка, примеры
Подключение адаптера

Настройка цвета при достижении края прокрутки

colorEdgeEffect – атрибут, отвечающий за вывод цветового эффекта при достижении ползунка прокрутки конца формы. В старых версиях андроид он не будет корректно работать.

<style name="BaseAppTheme" parent=MTheme.AppCompat.Light.NoActionBar">

<item name="colorEdgeEffect">@color/colorEdgeEffect</item>

</style>

//Далее применяем как тему.

<ListVie

…

android:theme="@style/BaseAppTheme" />
Android Studio Listview: оформление списка, примеры
Код вывода цветового эффекта при достижении края прокрутки
Автор статьи
Нет комментариев

Авторизоваться или зарегистрироваться для комментирования.