android - 具有动态标题的 Recyclerview 多视图类型
问题描述
我熟悉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
任何帮助将不胜感激。我从未致力于添加动态标题。
解决方案
我假设列表项按顺序出现。然后在一个列表之后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
智能地实施您的。
这可能无法为您提供您遇到的问题的确切解决方案。但是,我希望这有助于您了解如何解决问题。
推荐阅读
- android-studio - Android studio 点击按钮显示消息
- javascript - 处理下拉列表选项中可用的标签
- c# - 无法在具有正确文件名和扩展名的 devops rest api 中下载 attachemet
- c# - 如何仅更新 c#.net 数据库中同名的最高 id
- vue.js - 如何从 Azure AD 获取名字等信息并在 .net 核心中使用?
- javascript - 在 JS 中使用用户表单输入
- ckeditor4.x - 如何在ckeditor 4中设置默认值?
- android - 为什么 Integer.tostring 会抛出这个空指针异常?
- unity3d - Unity 3D - 烘焙光太暗
- vue.js - 如何在 Vue 组件(没有 Webpack)中使用非 Vue 自定义 Web 组件?