RecyclerView
RecyclerView больше не отвечает за отображение, его использование более развязано по сравнению с ListView. В отличие от ListView, RecyclerView больше не отвечает за такие функции отображения элементов, как их расстановка и т. д. Google разделил всю работу, связанную с макетом, отрисовкой и другими аспектами на различные классы. Поэтому разработчики могут настраивать различные функции в соответствии со своими потребностями.
Это типичное использование RecycleView:
Класс | Описание |
---|---|
RecyclerView.Adapter | Управляет набором данных и создаёт представление для каждого элемента |
RecyclerView.ViewHolder | Хранит представление элемента |
RecyclerView.LayoutManager | Отвечает за раскладку элементов |
RecyclerView.ItemDecoration | Добавляет дочерние представления к каждому элементу, используется для рисования разделителей в демо |
RecyclerView.ItemAnimator | Отвечает за анимационные эффекты при добавлении и удалении данных |
Проект
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 3));
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
myAdapter.notifyItemInserted(size);
myAdapter.notifyItemRemoved(0);
myAdapter.notifyDataSetChanged();
Методы обновления данных:
/**
* Добавление данных
* @param content
* @param position
*/
public void addItem(String content, int position) {
list.add(position, content);
notifyItemInserted(position);
}
/**
* Увеличение данных
* @param content
*/
public void addItem( String content ){
if ( list == null ) {
list = new ArrayList<>() ;
}
list.add( list.size() , content );
notifyItemInserted( list.size() );
}
/**
* Удаление данных
* @param model
*/
public void removeItem(String model) {
int position = list.indexOf(model);
list.remove(position);
notifyItemRemoved(position);//Attention!
}
/**
* Удаление данных
* @param position
*/
public void removeItem( int position ){
list.remove( position ) ;
notifyItemRemoved( position );
}
Эффект изображения:
Часто используемые методы ItemDecoration:
//Установка стандартной анимации
recyclerView.setItemAnimator( new DefaultItemAnimator()) ;
https://github.com/gabrielemariotti/RecyclerViewItemAnimators
//Анимация входа снизу экрана
recyclerView.setItemAnimator( new SlideInOutBottomItemAnimator( recyclerView ));
//Анимация входа слева экрана
recyclerView.setItemAnimator( new SlideInOutLeftItemAnimator( recyclerView ));
//Анимация входа справа экрана
recyclerView.setItemAnimator( new SlideInOutRightItemAnimator( recyclerView ));
//Анимация входа сверху экрана
recyclerView.setItemAnimator( new SlideInOutTopItemAnimator( recyclerView ));
//Масштабирование при входе (Примечание: есть ошибка при тестировании)
recyclerView.setItemAnimator( new ScaleInOutItemAnimator( recyclerView )) ;
//Одновременное масштабирование и вход справа (Примечание: есть ошибка при тестировании)
recyclerView.setItemAnimator( new SlideScaleInOutRightItemAnimator( recyclerView ));
Эффект изображения:
Этот проект представляет собой сложную систему распределения макетов MultiType.
MultiType — это промежуточная система распределения для многотипных списков, которая помогает быстро и легко разрабатывать сложные страницы списков. Она изначально была разработана для страниц чата, где сообщения имеют множество различных типов и часто добавляются новые. MultiType может легко справляться с этим, обеспечивая модульность кода и возможность расширения новых типов в список. Он имеет встроенную систему повторного использования пула типов-представлений, поддерживает RecyclerView и прост в использовании.
GitHub:
Связанные блоги:
Ссылки на проекты Android:
compile 'me.drakeet.multitype:multitype:2.2.2'
Эффект изображения:
Этот проект реализует функцию обновления списка при прокрутке вниз.
Справочные материалы
Android: попытка нового подхода к написанию сложных списков MultiType.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )