首页
学习
活动
专区
工具
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.6K10

《从零开始学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.8K20

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

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

1.3K20

《从零开始学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.7K30

SAP FI-资产管理方案

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

2.8K54

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

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

48120

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

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

22110

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

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

88030

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

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

70620

【新手向】为何要这样安装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

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结构,使用该执行后,项目的版本号加

13910

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

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

87041

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

使用继承机制,分别设计实现抽象类 图形类,子类类圆形类、正方形类、长方形类,要求: ①抽象类图形类中有属性包括画笔颜色(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),设置要运行节点。

89220

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

1.9K31

Python虚拟环境

简介 Python 提供虚拟环境,虚拟环境是 Python 解释器一个私有副本,在虚拟环境可以安装私有包,而且不会影响到系统安装全局 Python 解释器,同时使用虚拟环境不需要管理员权限。...作用 虚拟环境用于解决不同项目所需 Python 解释器版本不一致以及包混乱等问题。...可以将系统全局 Python 解释器只作为创建虚拟环境源,从而为每个程序单独创建虚拟环境,这样可以保证程序只能访问虚拟环境包,从而保证全局解释器干净整洁。 3....检查是否安装 virtualenv --version 如果显示错误说明未安装。...【注】Python 3.3 中使用 pyvenv 命令创建虚拟环境包含 pip,需要手动安装。Python 3.4 及后续版本则没有该缺陷,pyvenv 可以完全代替 virtualenv 。

49810

Vue.js vs React:哪一个更适合你项目?

Vue.js vs React:哪一个更适合你项目? 摘要 ‍ 猫头虎博主在本文中将深入探讨Vue.js和React两大流行前端框架之间关键差异,以及它们在不同项目中应用场景。...通过深度分析和比较,你将能够更好地理解哪个框架更适合你项目,并学会如何在SEO脱颖而出。 引言 在当今Web开发领域,选择一个适用于你项目的前端框架是至关重要决策。...Vue.js和React都是领先框架,拥有广泛社区支持和众多生态系统。但究竟哪一个更适合你项目?这不仅取决于项目需求,还涉及到开发人员技能和偏好。...我们将深入探讨Vue.js核心特性,响应式数据绑定、组件化开发和单文件组件。此外,我们将通过示例代码演示如何在Vue.js构建功能强大用户界面。...比较与决策 在Vue.js和React之间做出选择需要考虑多个因素,包括项目规模、开发团队技能、性能要求等。我们将提供详细比较,帮助你理解哪个框架更适合你具体情况,并为你项目做出明智决策。

53610

Maven依赖管理大全

如果没有一个公共代码依赖项目,像很多工具类、pojo对象需要重复写多个,最可怕是不同项之间相同工具类、pojo名称一样,但是里面的代码有可能不一样。...同一个依赖不同项之间可能版本也会不一样,无法进行版本统一管理和升级。 install时候需要每个项目一个个进行,无法进行统一install操作,项目一多就非常浪费时间。...pom文件build用来构建项目jar、war、source源文件之类。 pom文件dependencies用来定义本项目的依赖关系,所有项目所需要依赖都可以在这边配置。...pom文件properties用来定义一些常量,在pom其它地方可以直接引用。 pom文件repositories主要是依赖和扩展远程仓库配置。...子项目禁止出现依赖version版本号,统一放在project-parent项目中管理。 总结: 每一个东西都需要管理,项目依赖也例外。

1.2K20
领券