蜗牛君漫聊动态布局框架(二):核心功能的思路与实现

2023-11-07

Hello! 大家好,我是蜗牛君~ 我们又见面了,本篇文章是蜗牛君漫聊动态布局框架的第二篇。上一篇中我们讲解了框架的大致思路,以及复习了一下RecyclerView的基础使用方式。那么本篇文章我们就正式开始框架的搭建了。

首先我们要做一件事情,就是捋清楚整个框架的搭建思路。

思路讲解

1、思路的起点:getItemViewType(int position)方法

只要是有Android原生开发经验的朋友都知道在RecyclerView出现之前,我们一直熟练使用的是ListView,为了解决ListView的一些不理想之处,所以出现了RecyclerView,但是ListView的大部分功能RecyclerView还是继承了。蜗牛君在很久之前使用ListView做开发时就遇到过一个需求,在新闻列表中要穿插广告,广告的布局样式和新闻布局完全不同,这个需求很常见,所以蜗牛君在网上很轻易的就查到了大量的文章,这些文章的内容大同小异,他们都有一个共同点,那就是使用Adapter的getItemViewType(int position)方法。

于是蜗牛君就在网上查了一下这个方法的用途。大概意思就是说在Adapter创建ViewHolder之前,会先通过getItemViewType方法判断数据的类型,可以根据getItemViewType方法不同的返回值,确定加载不同的ViewHolder。因此,getItemViewType方法就是思路的起点。

那我们在getItemViewType方法中做什么呢?由于getItemViewType方法的返回值是int类型,因此这个int类型的值要能够确定ViewHolder的具体类型。

2、数据类型和ViewHolder类型对应关系的存储

我们框架的原理就是根据不同类型的数据选择不同类型的ViewHolder,因此这份一一对应的关系如何存储至关重要。

我们的思路是使用HashMap集合,数据类型的Class类为Key值,ViewHolder类的Class类为Value值,这样就把一一对应的关系存储起来了。

既然我们存储的是Class类,因此在实例化的时候就需要用到Java的反射机制了,这也就是动态的体现。

3、数据和ViewHolder对应关系的查询

在HashMap集合中,Key值是数据类型的Class类,我们接下来要思考的问题是如何确定Key值。上文提到过,getItemViewType方法返回的数据类型是int类型,而我们HashMap中存储的Key值是Class类型,这完全不匹配啊!我们的策略是中间增加一层,建立Key值的索引目录。

具体来讲就是,我们在初始化时,要进行一步存储操作,这步操作包含两项:第一项就是将数据类型的Class类依次存入ArrayList集合;第二项是依次将数据与ViewHolder

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蜗牛君漫聊动态布局框架(二):核心功能的思路与实现 的相关文章

  • 使用 google Directions API 的地图视图绘制方向 - 解码折线

    我正在尝试使用 Google 方向 API 在我的地图视图上显示方向 但我在从 JSON 响应获取数据时遇到困难 我可以获得 级别 和 点 字符串 但无法弄清楚如何将它们解码为地图上的点 任何帮助将非常感激 我有一个类可以为您解码它们 添加
  • Android 在打开应用程序时会广播吗?

    例如 如果我想知道Youtube何时打开 是否有与之相关的广播 我当然知道我可以轮询 logcat 消息来检查活动 但我可以通过广播来做到这一点吗 因为它会少得多的耗电 此链接似乎表明这是不可能的 如何跟踪 Android 中的应用程序使用
  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • Android FragmentTransaction 自定义动画(未知动画师名称:Translate)

    我正在尝试让自定义动画与我的片段一起使用 我已按照在线教程进行操作 但出现以下错误 java lang RuntimeException 未知的动画师名称 翻译 动画的 XML 如下
  • Android 相机未保存在特定文件夹 [MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA]

    当我在 Intent 中使用 MediaStore INTENT ACTION STILL IMAGE CAMERA 时遇到问题 相机正常启动 但它不会将文件保存在我的特定文件夹 photo 中 但是当我使用 MediaStore ACTI
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • Android studio - 如何查找哪个库正在使用危险权限?

    我正在尝试将 apk 上传到 google play 商店 但令我惊讶的是 我正在使用以下权限 Your APK is using permissions that require a privacy policy android perm
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 获取其他指针的MotionEvent.getRawX/getRawY

    我可以获取其他指针的MotionEvent getRawX getRawY 值吗 MotionEvent getRawX API 参考 http developer android com reference android view Mo
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Android应用程序可以像旧的普通java小程序一样嵌入到网页中吗?

    我对 android 平台一无所知 也无法在互联网上找到这个基本问题的答案 更新 好的 我本身无法嵌入 Android 应用程序 但是我可以在 Android Webbrowser 中嵌入 Java 的东西吗 不可以 您无法将 Androi
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • 亲测有效,如何用ChatGPT 生成高质量原创视频

    尽管ChatGPT目前缺乏视频生成的能力 但我们可以借助插件实现视频生成 特别是对于那些从事Tiktok海外运营的用户而言 Visla和HeyGen是我目前测试的两款可生成视频的插件 首先登陆您的ChatGPT帐号 并单击邮箱 勾选设置 S
  • CUDA的作用

    显卡中CUDA是什么及作用介绍 CUDA Compute Unified Device Architecture 显卡厂商NVidia推出的运算平台 CUDA是一种由NVIDIA推出的通用并行计算架构 该架构使GPU能够解决复杂的计算问题
  • 联合memcache,repcached,magent,monit四个组件搭建高可用集群方案

    一 基本介绍 1 组件承担的角色 1 memcache负责缓存对象 2 repcached负责单主单从的同步备份 3 magent代理实现N主N备 4 monit监听以上组件的各个实例端口 保证故障自动重启 2 集群思路 1 利用repca
  • Unlock PeopleSoft Objects All at Once

    Change control is used in Application Designer to lock definitions and track history changes for each object Change cont
  • 图解NCHW与NHWC数据格式

    图解NCHW与NHWC数据格式 田海立 CSDN CSDN博客 nchw 流行的深度学习框架中有不同的数据格式 典型的有NCHW和NHWC格式 本文从逻辑表达和物理存储角度用图的方式来理解这两种数据格式 最后以RGB图像为例来加深NHWC和
  • Adam优化算法详细解析

    本文转载于以下博客地址 http www atyun com 2257 html 如有冒犯 还望谅解 Adam优化算法是一种对随机梯度下降法的扩展 最近在计算机视觉和自然语言处理中广泛应用于深度学习应用 在引入该算法时 OpenAI的Die
  • 使用nginx实现负载均衡

    一 什么是负载均衡 随着互联网的发展 业务流量越来越大并且业务逻辑也越来越复杂 使用单台机器可能会造成性能问题和单点故障 因此需要多台机器来进行性能的水平扩展以及避免单点故障 为了将不同的用户的流量分发到不同的服务器上面 保持每台机器处理请
  • J-Link RTT调试的初始介绍

    1 RTT简介 RTT全称是Real Time Transmit 实时传输 是Segger公司推出的调试手段之一 它是一种用于嵌入式中与用户进行交互的技术 使用RTT可以从MCU快速输出调试信息和数据 且不影响MCU的实时性 只要支持J L
  • 渲染页到详情页到加入购物车

    1 渲染 拿到数据放在自己的data渲染 data headerList class tabid index active tabid点击时的下标 index是数组下标 active是选中时状态 分类功能 click handfenl it
  • 数据挖掘主要解决的四类问题

    数据挖掘主要解决的四类问题 数据挖掘非常清晰的界定了它所能解决的几类问题 这是一个高度的归纳 数据挖掘的应用就是把这几类问题演绎的一个过程 下面让我们来看看它所解决的四类问题是如何界定的 1 分类问题 分类问题属于预测性的问题 但是它跟普通
  • yolo目标检测图片时,png出问题(花掉),bmp、jpg等其他格式没问题

    yolo做目标检测的时候 当输入图片是png的时候 整个图片会花掉 如图所示 研究了好久 是因为png是8位 bmp jpg是24位 所以要将8位转换成24位 这里参考了 https blog csdn net qq 17130909 ar
  • ORA-01578(数据块损坏) 转

    当Oracle数据库出现坏块时 Oracle会在警告日志文件 alert SID log 中记录坏块的信息 ORA 01578 ORACLE data block corrupted file 7 block
  • wxWidgets简单的多线程

    include
  • vue el-tree:默认展开第几级节点

    需求描述 Tree 树形结构 默认展开第二级菜单 查 element 文档 解决方法 设置 default expanded keys 的值为 idArr 数组
  • JVM——查看full gc频率(jstat -gc)

    问题 如何查看系统的full gc频率 思路 使用JVM工具jstat查看 步骤 1 运行jps获取进程号 jps 2 目标进程9 监控JVM 每5秒打印一次 jstat gc 9 5000 说明 S0C 幸存区1的大小 S1C 幸存区2的
  • 多线程(四)线程的状态及生命周期

    目录 一 线程的状态 新建 初始 就绪 可运行 运行 阻塞 死亡 二 线程的状态转移 NEW RUNNABLE TERMINATED 状态的转移 yield 方法 让出 CPU执行权 三 线程的生命周期 一 线程的状态 NEW 安排了工作
  • Redis数据类型-hash

    一 概述 Redis中hash类型可以具有String key和String value的map容器 所以该类型非常适合存储值对象的信息 如username password和age等 如果hash中包含很少的字段 那么该类型的数据也将仅占
  • 华为无盘服务器,无盘服务器操作系统

    无盘服务器操作系统 内容精选 换一换 本节操作介绍购买云耀云服务器的操作步骤 购买时 为减少您配置参数的时间 部分参数由系统自动分配 以下参数配置供你了解系统的默认配置 购买云耀云服务器仅支持 包年 包月 的计费方式 请您在购买前确保已完成
  • Web实现前后端分离,前后端解耦

    点击上方 Java之间 选择 置顶或者星标 你关注的就是我关心的 作者 山河远阔 来源 https blog csdn net weixin 37539378 article details 79956760 上一篇 面试官 数据量很大 分
  • 蜗牛君漫聊动态布局框架(二):核心功能的思路与实现

    Hello 大家好 我是蜗牛君 我们又见面了 本篇文章是蜗牛君漫聊动态布局框架的第二篇 上一篇中我们讲解了框架的大致思路 以及复习了一下RecyclerView的基础使用方式 那么本篇文章我们就正式开始框架的搭建了 首先我们要做一件事情 就