同一滚动下的水平和垂直RecyclerView

2024-01-02

我必须做一些像 Instagram 那样的事情。我有一个用于报道的水平 RecyclerView,下面有一个用于提要的垂直 RecyclerView。我想完成相同的滚动行为(故事应该在滚动时与提要一起出现,而不是固定在顶部)。我找到的唯一解决方案是 NestedScrollView,但它对 RecyclerViews 的性能极其糟糕,我的屏幕几乎永远冻结。我尝试了很多在这里找到的技巧,如nestedScrollEnabled、autoLayoutMeasure等,但没有任何效果。谢谢。


抱歉,如果这个解释太抽象。如果您需要我说得更明确,请告诉我。

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

private static final int TYPE_HEADER = 0;
private static final int TYPE_POST = 1;

List<Post> posts;
List<FeedItems> feedItems; //this array is going to populate the horizontal recycler view. Notice that is passed it on the adapter constructor

public VerticalAdapter(List<Post> posts,List<FeedItems> feedItems) {
    this.posts = posts;
    this.feedItems = feedItems;
}

public void notifyFeedChanged(List<FeedItems> newFeedItems){
    this.feedItems.clear();
    this.feedItems = newFeedItems; //set the new feed items in the array
    notifyItemChanged(0); //tell the main recycler view "Hey, update your first position". This will cause the onBindViewHolder to be called again an thus, the new items will be set into the horizontal recycler view
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    if (viewType == TYPE_HEADER)
        return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.your_header_layout, false));
    else if (viewType == TYPE_POST)
        return new PostViewHolder (LayoutInflater.from(parent.getContext()).inflate(R.layout.your_post_layout, false));

    throw new RuntimeException("Don't know this type");
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


    if (holder instanceof HeaderViewHolder){
        //set adapter for the horizontal recycler view
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(((HeaderViewHolder) holder).recyclerView.getContext(),LinearLayoutManager.HORIZONTAL, false)
        ((HeaderViewHolder) holder).recyclerView.setLayoutManager(linearLayoutManager);

        if (((HeaderViewHolder) holder).recyclerView.getAdapter() == null){ //only create the adapter the first time. the following times update the values
            AnotherAdaterYouNeedToCreateForTheHorizontalRecyclerView adapter = new AnotherAdaterYouNeedToCreateForTheHorizontalRecyclerView(feedItems);
            ((HeaderViewHolder) holder).recyclerView.setAdapter(adapter);
        }else {
            ((HeaderViewHolder) holder).recyclerView.getAdapter().notifyDataSetChanged();
        }

    }else if (holder instanceof PostViewHolder){
        //just do the normal post binding
    }
}

@Override
public int getItemCount() {
    return posts.size() + 1; // +1 because of the header
}

@Override
public int getItemViewType(int position) {
    return position == 0 ? TYPE_HEADER : TYPE_POST;
}

private class HeaderViewHolder extends RecyclerView.ViewHolder{

    RecyclerView recyclerView;

    public HeaderViewHolder(View itemView) {
        super(itemView);
        recyclerView = itemView.findViewById(R.id.the_recycler_view_id_on_the_heaedr_layout_file);
    }
}

private class PostViewHolder extends RecyclerView.ViewHolder{

    ImageView imageView;

    public PostViewHolder(View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.post_image_view_or_whatever);
    }
}}

因此,您的垂直回收器视图具有垂直绘制的帖子项目(或您的帖子类别),这是很容易实现的。现在,对于水平视图,您应该实现一个 recyclerview 标头(查看我的适配器示例)。标题布局将有另一个水平回收器视图。

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

同一滚动下的水平和垂直RecyclerView 的相关文章

  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib
  • 如何关闭整个数据库的区分大小写

    我创建了一个包含许多脚本和许多存储过程的数据库 在这个数据库中 我们没有注意担心区分大小写 因为它对于我的本地开发计算机来说是关闭的 综上所述 我试图弄清楚如何使以下两条语句返回相同的结果 SELECT FROM companies SEL
  • 从文件路径显示图像视图?

    我需要仅使用文件名而不是资源 ID 来显示图像 ImageView imgView new ImageView this imgView setBackgroundResource R drawable img1 我在可绘制文件夹中有图像
  • 无论我如何尝试,“netsh wlan startHostednetwork”命令都不起作用

    C Windows system32 gt netsh wlan 显示驱动程序 接口名称 无线网络连接 Driver DW1501 Wireless N WLAN Half Mini Card Vendor Broadcom Provide
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • mysql 查询选择当月的所有行?

    我有一个名为 startdate 的日期时间类型的列 我必须获取当前月份的开始日期和结束日期之间的所有行 即从 1 11 2014 到 30 11 2014 select from your table where year curdate
  • 除了 Erlang 之外,还有哪些系统是基于“绿色流程”的?

    我正在阅读这个信息页面绿线 维基百科 http en wikipedia org wiki Green thread我想知道 除了 Erlang 之外 还有哪些编程系统依赖于 绿色进程 Edit 绿线 绿色流程 基于绿色流程 Erlang
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar
  • 如何从地址簿中获取一个人的电话号码?

    我想做的就是让用户从地址簿中选择一个号码 我在这个问题中找到了代码 如何从地址簿联系人获取电话号码 iphone sdk https stackoverflow com questions 286207 how to get a phone
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要
  • 混合本机/托管可执行文件中的最终托管异常处理程序?

    我有一个使用 clr 编译的 MFC 应用程序 并且我正在尝试为未捕获的托管异常实现最终处理程序 对于本机异常 重写CWinApp ProcessWndProcException works 杰夫的书中提到的两个事件代码项目文章 http
  • 无法安装最新版本的 Numpy (1.22.3)

    我正在尝试安装最新版本的 numpy 即 1 22 3 但看起来 pip 无法找到最后一个版本 我知道我可以从源代码本地安装它 但我想了解为什么我无法使用 pip 安装它 PS 我有最新版本的pip 22 0 4 ERROR Could n
  • Android GetPTLAFormat 上的 Phonegap 错误

    我们正在开发一个使用 jQuery 移动和电话间隙的应用程序 一切似乎都工作正常 但是当在连接的 Android 手机上运行应用程序时 我们在 Eclipse logcat 中看到大量类似这样的错误 0 GetPTLAFormat inva
  • Google Drive 服务帐户上传的位置

    我正在尝试使用服务帐户将文件上传到我的 Google 云端硬盘 当我部署此代码时 我不希望用户给予授权 我希望他们上传到我的帐户 我通过 PHP 使用它 下面是我到目前为止的情况 这段代码是基于官方文档给出的例子 当我运行 php 脚本时
  • Swift:UICollectionViewCell didSelectItemAtIndexPath 更改背景颜色

    我可以轻松更改单元格的背景颜色CellForItemAtIndexPath method func collectionView collectionView UICollectionView cellForItemAtIndexPath
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • div id javascript中的自动递增数字

    有人能帮帮我吗 如何使用javascript在div ID中添加自动递增数字 我有四个 div 我希望通过 javascript 在 ID 中自动对它们进行编号 box1 box2 box3 box4 这是我的代码 div class so
  • 通过 Solrj 查询 Solr:基础知识

    我正在尝试在 Eclipse 中通过 solrj 查询 solr 我已经尝试过最新的solrj 维基 http wiki apache org solr SolJava例子 import org apache solr client sol
  • docker已满,所有inode都被使用

    遇到了很大的问题 我所有的索引节点似乎都被使用了 我已经清理了所有未使用的卷 清理所有容器和图像 使用命令 gt docker prune 但它似乎仍然满了 Filesystem Inodes IUsed IFree IUse Mounte
  • 实现自定义 ViewModifier,其中输出以具体视图类型为条件 (SwiftUI)

    我想创建一个 ViewModifier 其中输出以它正在修改的内容类型为条件 我管理的概念的最佳测试 使用 Text 和 TextField 作为示例视图类型 如下 struct CustomModifier
  • Java 8 groupingby 返回多个字段

    在 Java 8 中 如何对返回多个字段的单个字段进行分组 在下面的代码中 我传递名称和要求和的字段 在这种情况下为 总计 但是我想返回客户列表中每个 名称 的 总计 和 余额 字段的总和 可以是键和值作为数组的映射 可以通过使用单个 gr
  • VBA Microsoft.XMLHTTP setRequestHeader 不发送 cookie

    我的 VBA 代码发送除 Cookie 信息之外的所有标头 Dim oXMLHttpRequest As Object Set oXMLHttpRequest CreateObject Microsoft XmlHttp oXMLHttpR
  • 解压 pyspark dataframe 中的元组列表

    我想要解压 pyspark 数据框列中的元组列表 假设一列为 blue 0 5 red 0 1 green 0 7 我想分成两列 第一列为 blue red green 第二列为 0 5 0 1 0 7 Topic Tokens 1 blu
  • Java:如何返回破坏二叉搜索树的节点?

    研究一个应该返回破坏二叉搜索树的节点的方法 如果没有一个节点返回破坏二叉搜索树的节点 则返回 null 一些测试用例通过了 但其中一些失败了 我不确定为什么 到目前为止 这是我的代码 public static Node checkBSTV
  • Windows 上“打开 CA 私钥时出错”

    我正在运行Windows Server 2003 并安装了Win64 OpenSSL v1 0 1i 轻量级 无论我遵循什么指南进行设置 在尝试实际签署证书时我总是会遇到以下错误 openssl ca in my csr out my ce
  • jq 和数学函数

    我正在从房地产数据库检索 JSON jq可以轻松提取单独的属性 值 但某些值的单位不方便 例如 LotSize 变量的单位是平方英尺 需要除以 43560 才能得到英亩 这是更常规的 而 dateSold 是 Linux 时间戳 这是一个示
  • String s1 == String s2 (true) 但 FieldOffset 不同

    当我学习java时 我了解到比较2个字符串的正确方法是使用equals而不是 这条线 static String s1 a static String s2 a System out println s1 s2 将输出 true 因为 jv
  • CSS 图像在刷新时消失

    我正在将图像应用到liCSS 元素中 图像出现在li我第一次加载时的项目 但刷新后它们消失并被项目符号点取代 我正在使用预览选项 coda 2 它使用 Safari 但在 Firefox 最新版本 和 Chrome 最新 中 图像甚至无法加
  • 如何避免使用discord.js api超过速率限制?

    我试图了解不和谐 API 的工作原理 尤其是限速政策 通过阅读docs https discord com developers docs topics rate limits invalid request limit 我需要实现一个逻辑
  • 线程“main”中的异常 java.lang.NoClassDefFoundError: junit/textui/ResultPrinter

    我正在尝试在 Android Studio 0 3 0 中编译我的 Android 项目 今天我收到以下错误 Exception in thread main java lang NoClassDefFoundError junit tex
  • 让 SBT 在 Mac OS X 上工作的问题

    我正在尝试使用 Miles Sabin 的 Shapeless 项目的 HList 所以我从Macports安装了sbt 这是版本0 11 不幸的是 当启动 sbt 时 我收到以下错误消息 java lang IncompatibleCla
  • Concepts TS 中是否有任何预定义的概念?

    Concepts lite 已被接受为 TS 并 示例实现 合并到 GCC 主分支中 因此后续问题是是否有任何概念是预先定义的 like Sortable or Random access range 我在哪里可以找到这样的预定义概念 Is
  • Blazor Dlls - 用户可以访问它们并反编译吗?

    如果我在 Blazor 中遗漏了一些明显的内容 请原谅我 但是由于 dll 像 javascript 文件一样存在于浏览器中 用户是否可以下载 dll 文件并通过反编译文件和 或运行它们来查看执行代码在浏览器之外 如果开发人员没有意识到他们
  • 重复代码的设计模式/C# 技巧

    我有一个 WCF 服务 它记录所有异常 然后将它们作为错误异常抛出 我做了很多重复 例如在每个服务方法中 try do some work catch Exception ex Logger log ex actually will be
  • Maven 3 JavaDoc 插件与 TestNG 组冲突

    我有以下内容
  • 同一滚动下的水平和垂直RecyclerView

    我必须做一些像 Instagram 那样的事情 我有一个用于报道的水平 RecyclerView 下面有一个用于提要的垂直 RecyclerView 我想完成相同的滚动行为 故事应该在滚动时与提要一起出现 而不是固定在顶部 我找到的唯一解决