如何创建具有多种视图类型的RecyclerView

2023-11-27

From 使用 RecyclerView 创建动态列表:

当我们创建一个RecyclerView.Adapter我们必须指定ViewHolder将与适配器绑定。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private String[] mDataset;

    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);

        //findViewById...

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mTextView.setText(mDataset[position]);
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

是否可以创建RecyclerView具有多种视图类型?


是的,这是可能的。只需实施getItemViewType(),并照顾viewType参数输入onCreateViewHolder().

所以你做类似的事情:

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    class ViewHolder0 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder0(View itemView){
        ...
        }
    }

    class ViewHolder2 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder2(View itemView){
        ...
    }

    @Override
    public int getItemViewType(int position) {
        // Just as an example, return 0 or 2 depending on position
        // Note that unlike in ListView adapters, types don't have to be contiguous
        return position % 2 * 2;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case 0: return new ViewHolder0(...);
             case 2: return new ViewHolder2(...);
             ...
         }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        switch (holder.getItemViewType()) {
            case 0:
                ViewHolder0 viewHolder0 = (ViewHolder0)holder;
                ...
                break;

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

如何创建具有多种视图类型的RecyclerView 的相关文章

  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • 如何更改 SwiftUI 列表中分隔符的颜色?

    我在 SwiftUI 中创建了一个列表 我想更改颜色或删除分隔符 因为在 UIKit 中 我们可以轻松更改 TableView 中分隔符的颜色 下面是 SwiftUI 中列表的代码和 UI 图片 State private var user
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • Android - 以编程方式选择菜单选项

    有没有办法以编程方式选择菜单选项 基本上 我希望视图中的按钮能够执行与按特定菜单选项相同的操作 我正在考虑尝试调用 onOptionsItemSelected MenuItem item 但我不知道要为菜单项添加什么 是的 有一种方法可以选
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

  • Springboot 日志配置

    我尝试配置我的 springboot 应用程序以登录一个文件一天 所以我配置我的 logback xml 就像这样
  • jquery 更改在动态值更改的情况下不起作用

    在 jQuery 中我如何跟踪onchange如果文本框的值因其他事件而动态变化 则发生事件 我尝试过这个但它不起作用 txtbox change function alert change keyup不涵盖所有自然情况 两种情况当chan
  • “adb screencap /sdcard/screenshot.raw”生成什么格式? (没有“-p”标志)

    我正在寻找使用adb screencap实用程序没有 p旗帜 我想象输出将以原始格式转储 但看起来并非如此 我尝试打开原始图像文件Pillow python 库导致 adb pull sdcard screenshot raw screen
  • 页面加载时将光标更改为忙

    我了解如何在页面进行和 ajax 调用时使用 javascript 将光标更改为忙 但是我有一个不使用ajax的页面 它使用回发来重新加载页面 然而 加载的数据量相当大 并且需要几秒钟的时间 在此期间用户仍然可以点击该页面 我想将光标转到
  • `script` 和 `link as="script"` 标签有什么区别?

    除了加载脚本的标准方法之外 我见过人们这样做 有什么区别吗 注 还有一个类似的使用 link 和 script 标签引用 JavaScript 源代码有什么区别 问题询问关于 这是不同的 If that link标签有rel preload
  • 如何禁用谷歌浏览器自动更新? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有谁知道如何禁用 Google Chrome 自动更新本身 它会导致我的网络应用程序总是发生变化 我已尝试使用此页面上提供的或如中所述的 Google Update ADM 模板这篇
  • 将MaterialToolbar的标题更改为center

    我正在使用导航组件和材质工具栏 我刚刚使用材质工具栏设置了导航组件 通过这样做 每当片段更改显示的后退按钮时 导航组件就会自动更改材质工具栏的标题 问题是我只想将标题重力更改为中心而不删除那些导航组件工具栏支持 我怎样才能做到这一点 注意
  • 如何配置 rspec 以使用 spork 显示输出?

    我运行了 spork 来加速我的测试 但是当我运行它们时没有输出 是否有我需要修改的配置 刚刚也遇到了这个问题 在 spork 1 0 0rc4 和 rspec 2 14 1 rspec core 2 14 8 上运行 据我所知 问题在于以
  • 时间戳和日期时间

    我有一个包含两列的表 第一列是 当前日期 时间戳 另一列是 日期返回 日期时间列 我需要从天数中获取当前日期和日期返回之间的差异 这可能吗 不 这是不可能的 与流行的看法 以及名称本身 相反 timestamp column 实际上与时间无
  • “当前不会命中断点” - 我无法添加 .pdb 文件

    我在 Visual Studio 中有一个包含一个项目的解决方案2013 视觉C 但是当我构建它时debug模式 那么运行它debug我得到的模式 当前不会命中断点 尚未加载任何符号 对于本文档 我试图以类似于人们建议的 Visual C
  • Linux:有没有办法在不停止/暂停进程(SIGSTOP)的情况下使用 ptrace?

    我正在尝试将程序从 Windows 移植到 Linux 当我发现没有 真实 的时候 我遇到了一个问题ReadProcessMemoryLinux 上的对应项 我寻找替代方案 然后发现ptrace 一个强大的进程调试器 我快速用 C 编写了两
  • 在双精度和字节数组之间进行转换,以便通过 ZigBee API 传输?

    我正在尝试获取两个双精度数 GPS 坐标 并通过 ZigBee API 将它们发送到另一个 ZigBee 接收器单元 但我不知道如何将双精度数分解为字节数组 然后将它们重新组合回原始形式一旦他们被转移 基本上 我需要将每个双精度数转换为八个
  • 使用 PageView 时的 FadeTransition

    我试图做一些应该很简单的事情 但事实证明这非常困难 当用户滚动到 flutter web 上的下一页时 我试图进行淡入淡出过渡 我尝试使用在 stackoverflow 上找到的许多代码 但没有任何效果 我最后尝试的是以下代码 它给了我一个
  • 如何缓存bust sw-toolbox?

    我一直在玩弄服务人员和 sw toolbox 两者都是很好的方法 但似乎都有其弱点 我的项目开始时使用 Google 的 Service Worker 方法 link 我的看法是 您必须手动更新缓存清除的版本号 我也可能是错的 但我不认为用
  • 如何在不同服务器上的两个不同数据库之间复制或导入 Oracle 模式?

    从一个用户 实例 服务器复制架构的最佳方法是什么 jdbc oracle thin deeb02 1535 DH user pov 到另一个用户 实例 服务器 jdbc oracle thin 123 456 789 123 1523 or
  • 在history.push()之后组件没有被渲染

    单击按钮后 我将通过执行以下操作更改 URLhistory push import createHistory from history createBrowserHistory const history createHistory so
  • 如何在 bash 中等待多个子进程完成,并在任何子进程以代码 !=0 结束时返回退出代码 !=0?

    如何在 bash 脚本中等待从该脚本生成的多个子进程完成 然后返回退出代码 0当任何子进程以代码结束时 0 简单的脚本 bin bash for i in seq 0 9 do doCalculations i done wait 上面的脚
  • R:因子水平,将其余部分重新编码为“其他”

    我很少使用因子 通常认为它们是可以理解的 但我经常对特定操作的细节感到模糊 目前 我正在将很少观察到的类别编码 折叠到 其他 中 并正在寻找一种快速的方法来做到这一点 我有一个变量的大约 20 个级别 但有兴趣将其中一堆折叠为一个 data
  • django 中的完全外连接

    如何使用 django QuerySet API 创建跨 M2M 关系的完整外部联接的查询 如果不支持 欢迎一些有关创建我自己的经理来执行此操作的提示 编辑添加 S 洛特 感谢您的启发 对 OUTER JOIN 的需求来自于应用程序 它必须
  • 如何创建具有多种视图类型的RecyclerView

    From 使用 RecyclerView 创建动态列表 当我们创建一个RecyclerView Adapter我们必须指定ViewHolder将与适配器绑定 public class MyAdapter extends RecyclerVi