Recyclerview несколько типов представлений с динамическим заголовком - PullRequest
1 голос
/ 27 апреля 2019

Я знаком с RecyclerView несколькими элементами просмотра.

Недавно я столкнулся с вопросом о добавлении динамического заголовка на основе некоторых критериев.Я пытаюсь разобраться с данными данными, но моя логика не работает

Здесь у меня есть пользовательский список, который имеет 4 элемента

{"en":"Candy"}, name='c1', id= 1}
{"en":"Bar"}, name='c2', id= 2}
{"en":"Bar"}, name='c3', id= 3 }
{"en":"Donut"}, name='c4', id= 4}

Теперь, как написатьусловие в getViewType(intposition), так что результирующий вывод с представлением заголовка.

Candy
tv -> c1   tv->id1

Bar
tv ->c2     tv->id2 
tv ->c3     tv->id3

Donut
tv ->c4     tv -> id4

Любая помощь будет принята с благодарностью.Я никогда не работал над добавлением динамического заголовка.

1 Ответ

0 голосов
/ 28 апреля 2019

Я предполагаю, что элементы списка появляются последовательно.Затем после списка Candy у вас будет список Bar, затем список Donut и так далее.У меня есть похожая реализация здесь, в Github , где вы можете получить представление о том, как вы можете реализовать это, используя различные типы представлений.

Я бы хотел предложить проанализировать разные списки из исходного списка, как показано ниже.

ArrayList<Sweet> candyList = getAllCandiesFromTheOriginalList();
ArrayList<Sweet> barList = getAllBarsFromTheOriginalList();
ArrayList<Sweet> donutList = getAllDonutsFromTheOriginalList(); 

Как только у вас есть весь список, вы можете отследить размер каждого из ваших отдельных списков и соответственно получить тип представления в вашей функции getItemViewType.

// Initialize these variables in the constructor of your adapter
// Make these variables global, so that it can be used from other functions. 
int candyListSize = candyList.size();
int barListSize = barList.size();
int donutListSize = donutList.size();
int totalSize = candyListSize + barListSize + donutListSize;

int CANDY_HEADER_TYPE = 99;
int BAR_HEADER_TYPE = 98;
int DONUT_HEADER_TYPE = 97;

// I assume that candy, bar, and donut comes sequentially in your RecyclerView
@Override
public int getItemViewType(int position) {

    if (position == 0) return CANDY_HEADER_TYPE;
    else if (position == candyListSize + 1) return BAR_HEADER_TYPE;
    else if (position == candyListSize + barListSize + 2) return DONUT_HEADER_TYPE;

    return super.getItemViewType(position);
}

@Override
public int getItemCount() {
    return totalSize + 3; // As there will be 3 extra headers.
}

Вам также необходимо грамотно реализовать onBindViewHolder.

Это может не дать вам точного решения вашей проблемы.Тем не менее, я надеюсь, что это помогает понять, как вы можете решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...