我熟悉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
任何帮助将不胜感激。我从未尝试添加动态标头。
答案 0 :(得分:0)
我假设列表项按顺序出现。然后,在列出Candy
之后,您将得到Bar
的列表,然后是Donut
的列表,依此类推。我有一个类似的实现here in 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
。
这可能无法为您提供所遇到问题的确切解决方案。但是,我希望这有助于您了解如何解决该问题。