Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для arvalon
22 / 7 / 2
Регистрация: 26.10.2012
Сообщений: 212
Записей в блоге: 1

Как добавить один дополнительный элемент-заголовок в RecyclerView?

25.04.2017, 15:34. Показов 2455. Ответов 2

Студворк — интернет-сервис помощи студентам
Как можно добавить первым (нулевым) элементом особенный, отличающийся от остальных элемент-шапку в список RecyclerView? Список отображается, разметка для шапки нарисована.

Что сделано:

Адаптер с холдером:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class MyRecyclerAdapter extends RecyclerView.Adapter<BillRecyclerAdapter.ViewHolder>{
 
    Context ctx;
    private List<ProductCatalog> list;
 
    public MyRecyclerAdapter(Context context, List<ProductCatalog> list){
        this.ctx=context;
        this.list=list;
    }
 
 
    @Override
    public MyRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 
        View v = LayoutInflater.from(ctx).inflate(R.layout.item,parent,false);
        BillRecyclerAdapter.ViewHolder vh = new MyRecyclerAdapter.ViewHolder(v);
        return vh;
    }
 
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ProductCatalog pc = list.get(position);
 
        holder.name.setText(pc.name);
        holder.count.setText(pc.count);
        holder.price.setText(pc.price);
 
    }
 
 
    @Override
    public int getItemCount() {
        return list.size();
    }
 
    public static class ViewHolder extends RecyclerView.ViewHolder{
 
        private TextView name;
        private TextView count;
        private TextView price;
 
        public ViewHolder(View itemView) {
            super(itemView);
            name=(TextView)itemView.findViewById(R.id.name);
            count=(TextView)itemView.findViewById(R.id.count);
            price=(TextView)itemView.findViewById(R.id.price);
        }
    }
 
}


Инициализация и заполнение адаптера в onCreate в Activity:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
RecyclerView mRecyclerView = (RecyclerView)findViewById(R.id.recyclerview);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
MyRecyclerAdapter mAdapter = new MyRecyclerAdapter(this, list);
mRecyclerView.setAdapter(mAdapter);


Если в onBindViewHolder проверить position на равенство 0 то получается это и есть "первая" View, на место которой надо заинфлейтить и подставить элемент-шапку? Но туда же приходит на вход holder, на него можно не обращать внимания и внутри метода создать свой холдер и заполнить своими данными? И/ИЛИ надо переписать и onCreateViewHolder и там уже выдавать нужный холдер. Но в этом методе нет же никакого position, на котором я сейчас стою, что бы понять какую разметку и какой холдер использовать?
Да, и метод getItemCount тоже следует подкрутить что бы он выдавал на 1 больше?

P.S. готовые решения вида SectionedRecyclerViewAdapter не предлагать ) Воспользовался вот этим - всё было хорошо пока не потребовалось сделать что-то дополнительное над списком, в частности что бы он реализовывал интерфейс filtrable. На примерах с голым RecyclerView можно понять как сделать, если же есть надстройка, слой над RecyclerView непонятно как там это применять. Открыл реализацию и утонул...
Хочется сделать руками если есть такая возможность что бы понимать что вообще произошло и была возможность дальнейшей доработки.

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2017, 15:34
Ответы с готовыми решениями:

Липкий заголовок в recyclerview
Добрый день! Реализовывал ли кто-нибудь в своих приложениях список с липким заголовком? Интересует какие либы вы использовали для...

Как добавить RecyclerView в VKList?
Всем привет!!! Нужна помощь не знаю как добавить RecyclerView в VKList. Кто уже сталкивался с данной темой подскажите, дайте совет как...

Как добавить параметр id к обработчику RecyclerView
Т.к у RV нет обработчика, как у того же ListView, то пришлось реализовать самому. Нашёл здесь реализацию, но нужно добавить ещё один...

2
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
25.04.2017, 15:57
что-то типа такого
Java
1
2
3
4
5
6
7
    private final int HEADER = 0;
    private final int ITEM = 1;
 
    @Override
    public int getItemViewType(int pos) {
        return pos == 0 ? HEADER : ITEM;
    }
в onCreateViewHolder вторым параметром прилетает этот itemType
проверяем и в зависимости от itemType (HEADER или ITEM) инфлейтим из разных разметок

а уже в onBindViewHolder по позиции - если == 0 то это хидер, иначе берем из листа get(pos + 1)

и да, getItemCount возвращать size() + 1
1
 Аватар для arvalon
22 / 7 / 2
Регистрация: 26.10.2012
Сообщений: 212
Записей в блоге: 1
25.04.2017, 16:27  [ТС]
Цитата Сообщение от Паблито Посмотреть сообщение
в onCreateViewHolder вторым параметром прилетает этот itemType
да, вот он, заветный параметр и метод getItemViewType с помощью которых понятно как сделать.
Спасибо, RecyclerView становиться ещё на копеечку ближе в понимании
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2017, 16:27
Помогаю со студенческими работами здесь

Как сделать последний пустой элемент в RecyclerView для прокрутки
Доброго дня. Необходимо сделать сделать следующее поведение прокручиваемого списка. Описать словами и представить это можно следующим...

Как определить, что элемент RecyclerView пересекает при перемещении регион кнопки?
У меня есть recyclerview а внизу экрана есть кнопка. На recyclerview повешен TouchListener и у него есть метод public boolean onTouch(View...

Добавить элемент в заголовок формы
Как добавить элемент на границу формы(та которая имеет стиль Винды, например в 7ке он полупрозрачный)???? Например в Опере верхняя часть...

Кольцевая диаграмма PhP как добавить ещё один элемент?
Как добавить ещё один круг в круговую диаграмму, что бы из неё сделать кольцевую диаграмму? Не могу понять как это сделать так как дали...

Можно ли как нибудь найти элемент ПО КЛАССУ (он такой один) и добавить ID?
как искать по ID и менять свойства я понял. Но ID у нужного элемента просто нет, и не знаю за что зацепиться! только за класс, получается....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru