Я предполагаю, что элементы списка появляются последовательно.Затем после списка 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
.
Это может не дать вам точного решения вашей проблемы.Тем не менее, я надеюсь, что это помогает понять, как вы можете решить эту проблему.