首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在recyclerView中显示两个不同项之间的不同项?

在RecyclerView中显示两个不同项之间的不同项,可以通过使用多个ViewHolder来实现。ViewHolder是RecyclerView中用于展示不同类型项的容器。

首先,需要创建多个ViewHolder类,每个ViewHolder对应一个不同类型的项。每个ViewHolder类需要继承RecyclerView.ViewHolder,并实现相应的布局和数据绑定逻辑。

接下来,在RecyclerView的Adapter中,需要重写getItemViewType方法,根据不同的数据类型返回不同的类型值。这样,RecyclerView就能根据不同的类型值来选择使用不同的ViewHolder。

在Adapter的onCreateViewHolder方法中,根据viewType创建对应的ViewHolder,并返回。

在Adapter的onBindViewHolder方法中,根据position和getItemViewType方法返回的类型值,选择使用对应的ViewHolder,并将数据绑定到ViewHolder上。

最后,在RecyclerView的LayoutManager中,可以使用GridLayoutManager或者StaggeredGridLayoutManager来设置不同类型项的布局方式,以实现不同项之间的不同展示效果。

以下是一个示例代码:

代码语言:txt
复制
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int TYPE_ITEM1 = 1;
    private static final int TYPE_ITEM2 = 2;

    // 数据源
    private List<Object> dataList;

    public MyAdapter(List<Object> dataList) {
        this.dataList = dataList;
    }

    @Override
    public int getItemViewType(int position) {
        // 根据数据类型返回不同的类型值
        if (dataList.get(position) instanceof Item1) {
            return TYPE_ITEM1;
        } else if (dataList.get(position) instanceof Item2) {
            return TYPE_ITEM2;
        }
        return super.getItemViewType(position);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 根据类型值创建对应的ViewHolder
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        if (viewType == TYPE_ITEM1) {
            View itemView = inflater.inflate(R.layout.item_type1, parent, false);
            return new Item1ViewHolder(itemView);
        } else if (viewType == TYPE_ITEM2) {
            View itemView = inflater.inflate(R.layout.item_type2, parent, false);
            return new Item2ViewHolder(itemView);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        // 根据类型值选择使用对应的ViewHolder,并将数据绑定到ViewHolder上
        if (holder instanceof Item1ViewHolder) {
            Item1 item1 = (Item1) dataList.get(position);
            ((Item1ViewHolder) holder).bindData(item1);
        } else if (holder instanceof Item2ViewHolder) {
            Item2 item2 = (Item2) dataList.get(position);
            ((Item2ViewHolder) holder).bindData(item2);
        }
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }

    // ViewHolder类
    private static class Item1ViewHolder extends RecyclerView.ViewHolder {
        // 布局中的控件
        private TextView textView;

        public Item1ViewHolder(View itemView) {
            super(itemView);
            // 初始化控件
            textView = itemView.findViewById(R.id.text_view);
        }

        public void bindData(Item1 item1) {
            // 绑定数据
            textView.setText(item1.getText());
        }
    }

    private static class Item2ViewHolder extends RecyclerView.ViewHolder {
        private ImageView imageView;

        public Item2ViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image_view);
        }

        public void bindData(Item2 item2) {
            // 绑定数据
            imageView.setImageResource(item2.getImageResId());
        }
    }
}

// 数据类型
class Item1 {
    private String text;

    public Item1(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

class Item2 {
    private int imageResId;

    public Item2(int imageResId) {
        this.imageResId = imageResId;
    }

    public int getImageResId() {
        return imageResId;
    }
}

在上述示例中,根据数据类型Item1和Item2分别创建了Item1ViewHolder和Item2ViewHolder,并在Adapter的getItemViewType、onCreateViewHolder和onBindViewHolder方法中进行了相应的处理。根据不同的数据类型,选择使用对应的ViewHolder,并将数据绑定到ViewHolder上。

注意:上述示例中的布局文件(item_type1.xml和item_type2.xml)需要根据实际情况进行创建和定义。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RecyclerView通过GridLayoutManager实现多样式布局示例

TagLayout去实现,但是尝试了一下后发现其实他们实现效果同项目要效果还是有蛮大差距,可以看到效果图里边是要求文字是居中对齐,左右对称。...下边就重点介绍一下使用recyclerview实现如图效果。...(getContext(), 2); recycerView.setLayoutManager(layoutManage); 可以看到GridLayoutManager需要传递两个参数,一个是上下文对象...因为recyclerview填充数据是根据adapter实现,我们就把给adapter数据源同样在setSpanSizeLookup这个方法里边判断一下不就行了吗?...根据这个思路于是有了下面的代码 /** * 如果单个item显示字数大于指定某个值就显示一列 默认2列 */ //设置item数据大于多少字只显示一行 默认 超过九个字程度只显示一列

1.8K10
  • 《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)

    创建ASP.NET Core Web应用程序 如果您使用是VS2017请看 VS2017创建ASP.NET Core Web程序(三) 在这个视频我们将讨论 可用同项目模板及其功能 预制项目模板有什么不同...此屏幕显示可用于创建ASP.NET Core应用程序同项目模板。 各个模板简单说明 空:名称暗示“空”模板包含任何内容。...Web应用程序(模型视图控制器):此模板包含创建Model,视图(Views)和控制器文件夹并添加Web特定内容,CSS,JavaScript文件,布局文件和网站所需其他资源,也可以基于此模板创建...API:此模板包含创建ASP.NET Core RESTful HTTP服务所需一切 AP I 不需要所有网站特定内容,JavaScript文件,CSS文件,视图文件,布局文件,因为它没有用户界面...Web API公开数据通常由其他应用程序使用,可以简单理解为 程序和程序之间打交道。 因此,API模板只会创建Controllers文件夹。

    3.9K20

    pycharm虚拟环境解释器设置_pycharm虚拟环境

    大家好,又见面了,我是你们朋友全栈君。...什么是Pycharm虚拟环境 假如想要在Pycharm建立两个项目,并且这两个项目需要用到同一个第三方库不同版本,如果这两个项目共享一个运行环境,那么此时就会发生版本冲突问题。...Virtualenv可以创建一套独立运行Python环境,从而做到不同项之间隔离。...代表新建一个虚拟环境,Existing interpreter代表不新建虚拟环境(选择现有的环境) Inherit global site-packages代表该虚拟环境可以使用base interpreter第三方库...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.4K20

    《从零开始学ASP.NET CORE MVC》:VS2017创建ASP.NET Core Web程序(三)

    创建ASP.NET Core Web应用程序 如果您使用是VS2019 请看 VS2019创建ASP.NET Core Web程序(三) 在这个视频我们将讨论 可用同项目模板及其功能 预制项目模板有什么不同...此屏幕显示可用于创建ASP.NET Core应用程序同项目模板。 各个模板简单说明 空:名称暗示“空”模板包含任何内容。...Web应用程序(模型视图控制器):此模板包含创建Model,视图(Views)和控制器文件夹并添加Web特定内容,CSS,JavaScript文件,布局文件和网站所需其他资源,也可以基于此模板创建...API:此模板包含创建ASP.NET Core RESTful HTTP服务所需一切 AP I 不需要所有网站特定内容,JavaScript文件,CSS文件,视图文件,布局文件,因为它没有用户界面...Web API公开数据通常由其他应用程序使用,可以简单理解为 程序和程序之间打交道。 因此,API模板只会创建Controllers文件夹。

    2.8K30

    SAP FI-资产管理方案

    :房屋、建筑物、机器、设备、交通工具以及其他与生产经营有关器具、设备和工具等。...因此,资产会计和各部门资产管理员应在资产内部转移监控实物交接。 5.资产盘点流程 ?...,由于价值已经完全在当月费用化,产生报废凭证 7.基建工程立项流程 ?...工程款清算 (XX WBS合同项目) l 预算被消耗,费用报表中体现“在建工程-预付进度款”发生额,付款报表支款信息不变 3)-4、工程过程需要支付其他费用项,也需要作为工程成本增加在建工程价值,...,:进口设备购置(代购)业务; l 通过项目WBS归集后结算到在建工程价值方式,:基建工程核算业务; l 通过设备生产订单归集生产成本后结算到在建工程价值方式,:设备自制生产业务; 当在建工程转固定资产时

    2.9K54

    IJCAI 2020 | 2 篇 基于会话推荐 相关论文

    首先,通过聚合根据当前会话每个项目检索到邻域会话嵌入来设计协同项目表示。 然后,利用自注意力来学习协同项之间远程依赖关系,并生成协同会话表示。...不同方法在两个数据集上性能。文章生成推荐前5个项目。粗体表示最好结果(越高越好),次好用下划线表示 2....现有方法是在静态设置评估,这在实际应用程序很少出现。 为了更好地解决 SR 任务动态性质,文章研究了一个增量 SR 场景,在该场景,新项目和首选项不断出现。...经验表明,MAN 非常适合增量 SR 任务,并且它性能始终优于最先进神经和非参数方法。文章分析了结果,并证明了它特别擅长增量学习新频繁项目的偏好。 MAN 计算流水线 ?...两个数据集上增量 SR 任务不同模型总体结果。模型按 HR@5 排序,每列最好方法以粗体表示

    51420

    kfold交叉验证好处_sklearn交叉验证

    大家好,又见面了,我是你们朋友全栈君。 运用Kfold交叉验证时,在一个限度内k值越大越好。因为k越大我们验证次数就越多,最后取出来平均数越能代表训练模型准确度。...但是k是需要在一个限度之内。k太大有两个坏处。 1. 容易给机器造成过重负担,花费大量时间。 2. 每一次验证测试集(或验证集)数据太少,很难得到准确误报率。...总体而言,k一般取10,取值依不同项目情况而定,当然一定存在k<n(训练集数据条数)。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    91730

    【Pythonr入门第二讲】你好,世界

    Flask实现简易聊天室 - 利用Flask框架创建一个简易实时聊天室。 信息管理系统 - 使用异步框架(Toronto)搭建一个信息管理系统,用于数据存储和检索。...安装 Python 后,你可以在命令行或终端运行 Python 解释器,执行 Python 脚本。全局环境库和工具对所有项目都是可用。...但在开发,全局环境一个问题是可能会出现版本冲突或库之间兼容性。为了解决这个问题,可以使用虚拟环境。 虚拟环境: 虚拟环境是一个独立 Python 环境,用于隔离不同项目的依赖关系。...它允许在同一台机器上同项目中使用不同版本 Python 解释器和第三方库,以避免项目之间依赖冲突。...例如,它知道 print 是一个函数,将其显示为蓝色;而字符串 "Hello Python world!" 不是 Python 代码,所以将其显示为橙色。

    25610

    【新手向】为何要这样安装Django?

    当你学习到一定基础后,你可以从Githubclone整个开源项目下来,里面有Django框架完整代码以及相关教程,尝试修改框架内容,甚至自己设计! 为何要这样安装Django? 本篇重点来了。...因为在后期开发多个项目时,可能要考虑用不同环境,用到不同版本django,不同需求项目放在相同环境很容易发生冲突。 DJANGO_SETTINGS_MODULE错误。...在使用Djangomanage.py运行项目时,django需要调用setting.py配置文件,不同项目有各自settings.py,在切换不同项目时容易发生: ImportError:Settings...不同版本之间选择 Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3....不同版本django在创建相同项目时会有不一样settings,并且包含有不同模块,或少或多了某些指令,所以在相同环境下不要安装不同版本django,在某版本下创建项目最好沿用原来django

    1.2K80

    多版本并行,测试如何做好质量保障?

    这个时候面临第一个问题是测试环境问题。 原则上来说,为了避免不同项之间互相影响,在测试环境上要做到彼此隔离。...首先,4.1和4.2版本时间可以错开,因此该两个版本可以共用一套环境,只是在代码部署上跟进下细节即可; 其次,独立版本1由于横跨了4.1和4.2版本,且涉及业务域和对应服务和其他项目差异较大,因此独占...这样一方面可以减少不必要工作量,另一方面也可以避免测试过程遇到不同项目的交互区域,责任划分以及问题跟进问题。...mock等手段); 解决不同项目在测试过程测试数据问题(测试数据准备也是多项目并行一大难点); 回归问题 其实多版本并行最大工作量就在于回归验证,一方面要确保每个项目涉及到变更影响部分都要回归到...,这是风险评估和风险管理; 在面临多项目并行时制定项目计划并逐步拆解为最小可执行任务; 通过流程规范去约束代码分支和提测发布过程,并时时跟进; 通过工具去提升过程效率(自动化等手段); 综合来说,软件工程方法论在实际工作

    86720

    Apriso开发葵花宝典之九 Project篇

    项目中实体被组织成模块。Process builder中一个项目中实体在实体管理器Entity Manager不可用。同一项目的不同模块之间或不同项之间引用它们,则可以在其他项目中使用它们。...在不同项目的模块之间:只有所选实体版本被移动,其他版本不会被移动,项目之间移动, 原始项目中实体“包含在程序包定义” Include in Package Definition标记将不再被标记...GPM项目Project将与PB项目的变化一起修改。 GPM项目将只包含“显式添加”到项目中实体默认版本,例如:操作A和操作B两个操作。操作A依赖于操作B。...,此时显示项目下所有模块及实体层级关系 模块层级查看:选择模块节点,在已创建包“Generated Packages”标签野双击需要查看包体后,选“内容”标签页,查看该模块下实体 3、刷新和同步...同步PB项目Synchronize PB Project:在刷新Refresh未能更新PB项目内容或者在和PB结构匹配时使用,从数据库读取PB项目的内容,并重新生成GPM结构,使用该执行后,项目的版本号加

    20710

    PS模块配置篇02-项目参数文件OPSA-基本控制

    仅用于SAP软件应用与学习,代表SAP公司。注:文中SAP相关字或图片,相应著作权归SAP所有。...(应用的话,待项目遇到时做测试) (5)显示选项与细节层次: 查看项目默认方式,比如CJ40、CJ30等是显示ID还是描述;细节层次99默认显示99层级 (6)合作伙伴确认过程: 卖整个项目时,项目需要打包去报价...; 项目汇总主数据:勾选时,汇总项目报表采用组织架构方式,勾选默认应用特性值汇总; iPPE项目关系:暂不清楚。...,以便用户识别项目所处状态;不同项目类型不同用户状态,项目用户状态可包含:项目立项、项目设计、项目采购与生产、项目生产、项目发货、现场施工、项目质保等。...---- 免责声明:本文所用视频、图片、文字涉及作品版权问题,请第一时间告知,我们将根据您提供证明材料确认版权并按国家标准支付稿酬或立即删除内容!

    95641

    Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

    同项之间代码和依赖需要通过包管理工具或其他方式进行共享。 2. 为什么选择 Monorepo?...选择 Monorepo 原因主要包括以下几点: 代码共享:在同一个仓库,项目之间代码共享更加便捷,减少了重复代码,提高了代码复用率。...各自优点和缺点 Monorepo 优势与挑战: 优势: 代码共享:容易在不同项之间共享代码和资源,减少重复代码。 一致性管理:统一管理依赖、构建和发布流程,确保一致性。...灵活性:各项目可以选择最适合自己工具和依赖版本。 权限控制:更容易对每个项目进行精细化权限管理。 挑战: 代码共享:在不同项之间共享代码和资源较为困难,可能导致重复代码。...本地链接:通过工具( Lerna、Yarn Workspaces 或 pnpm Workspaces)实现本地依赖链接,确保项目之间依赖关系清晰。 3.

    50610

    在画图软件,可以画出不同大小或颜色圆形、矩形等几何图形。几何图形之间有许多共同特征,它们可以是用某种颜色画出来,可以是填充或者填充

    使用继承机制,分别设计实现抽象类 图形类,子类类圆形类、正方形类、长方形类,要求: ①抽象类图形类中有属性包括画笔颜色(String类型)、图形是否填充(boolean类型:true表示填充,false表示填充...), 有方法获取图形面积、获取图形周长等; ②使用构造方法为其属性赋初值; ③在每个子类中都重写toString()方法,返回所有属性信息; ④根据文字描述合理设计子类其他属性和方法。...(2)设计实现画板类,要求: ①画一个红色、无填充、长和宽分别为10.0与5.0长方形; ②画一个绿色、有填充、半径为3.0圆形; ③画一个黄色、无填充、边长为4.0正方形; ④分别求三个对象面积和周长...,并将每个对象所有属性信息打印到控制台。...:" +getColour() +"\t"+"有无填充:" +isFill()+ "半径为:"+getR()+"圆形面积为:"+area()+"周长为:"+perimeter() ; } }

    1.8K30

    Jenkins-项目应用

    项目应用 目录 1、配置不同项之间依赖关系 1.1、配置上游 1.2、配置下游 2、按指定顺序执行多个项目 3、更改Jenkins主目录 4、创建节点进行分布式构建 1、配置不同项之间依赖关系...2、构建--->增加构建步骤(MultiJob Phase),默认是一个Job,要再添加两个Job,之后Job name输入要执行项目名。...3、更改Jenkins主目录 工作,由于Jenkins默认主目录空间太小,所以导致需要将Jenkins默认主目录修改到其它目录上。...4、创建节点进行分布式构建 Jenkins有个很强大功能:分布式构建(在Jenkins配置叫做节点),分布式构建能够让同一套代码在不同环境(:Windows和Linux系统等)编译、测试等...Jenkins显示节点连接成功。 三、设置节点。 1、进入项目(Test_Python_Demo),设置要运行节点。

    94520

    S7-1500 通过PNPN Coupler 通信

    PN IO 控制器之间跨网络边界进行数据交换,同时保持网络隔离。 两个 PROFINET IO 子网之间具有电隔绝。 一侧网络端错误对另一侧网络端没有影响,但可以在另一侧网络端诊断错误。...显示元件与接口 图02.显示PN/PN Coupler元件与接口 应用: PN/PN 耦合器具有两个 PROFINET 接口,每个接口连接到一个子网。...图03.PN/PN Coupler示意图 示例: 下面的示例显示两个网络相互独立。在每个 PROFINET IO 网络,它们设备名称唯一。...使用博途软件自带PN/PN耦合器设备进行组态使,两个CPU在同一项目和在不同项目下组态方式不同。...注意:两个子网配置输入输出子模块字节长度和槽号要一一对应; 图12.X2分配IO地址 组态配置完成,分别下载程序至CPU

    2.1K31

    数据开发数仓工程师上手指南(七)CDM-DWS层搭建规范及流程

    通过构建公共粒度汇总指标事实表,DWS层可以帮助识别趋势、模式和异常。原始数据可以比作城市地图上每条街道和建筑详细信息,而DWS层就像导航应用路况总结。...其中DWS设计原则总共有五层:2.1主题驱动聚集建模分析主题:基于供应商在招标过程行为模式进行建模,提供全方位分析支持。...num_provinces:参与省份数量 active_period:活跃期(例如,最近一次投标日期)2.2跨越事实聚集数据一致性:确保聚集数据与原始数据模型保持一致,跨越多个事实表进行汇总...单一事实表:在单一事实表(投标事务表)上进行聚集,保持数据模型简单和一致。...2.3数据公用性共享性:确保供应商画像数据可以多个业务部门和分析应用提供支持常用维度:对常用维度(地域、项目类型)进行聚集,提高查询性能2.4跨数据域数据隔离:将数据汇总限制在供应商域内,涉及其他业务域

    40020

    Maven标准化项目结构如何提高项目的可维护性和可读性?

    在软件开发过程,良好项目结构是保证项目可维护性和可读性重要因素之一。Maven作为一款流行项目管理与构建工具,提供了一套标准化项目结构,旨在帮助开发人员构建易于维护和阅读项目。...默认情况下,构建后产物(编译后.class文件、打包后.jar文件等)会被放置在target目录下。...开发人员只需按照规范将文件和目录放置在正确位置,就能够快速了解项目的整体结构和各个模块之间关系。 便于协作开发:标准化项目结构使得团队成员之间更容易理解和阅读彼此代码。...依赖管理:Maven标准化项目结构帮助开发人员管理项目的依赖关系。通过在pom.xml文件声明依赖,Maven可以自动下载和安装所需依赖库,并将其放置在正确位置供项目使用。...它通过一套约定俗成命名规则和目录结构,使得不同项目的代码和资源能够组织在合理有序位置,从而提高项目的可维护性和可读性。

    9210
    领券