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

如何在水平RecyclerView中基于垂直RecyclerView标题中设置相同的值

在水平RecyclerView中基于垂直RecyclerView标题中设置相同的值,可以通过以下步骤实现:

  1. 首先,确保你已经在项目中引入了RecyclerView的依赖库。
  2. 创建一个垂直RecyclerView,用于显示标题列表。可以使用RecyclerView和LinearLayoutManager来实现。
  3. 创建一个水平RecyclerView,用于显示具体内容。同样使用RecyclerView和LinearLayoutManager。
  4. 在适配器中,为垂直RecyclerView设置数据源,包括标题和对应的内容列表。
  5. 在垂直RecyclerView的适配器中,实现一个接口或回调方法,用于监听标题项的点击事件。
  6. 在监听方法中,获取点击的标题项的位置,并根据位置获取对应的内容列表。
  7. 将获取到的内容列表设置给水平RecyclerView的适配器。
  8. 在水平RecyclerView的适配器中,根据内容列表的数据,显示具体的内容。

以下是一个简单的示例代码:

代码语言:java
复制
// 垂直RecyclerView的适配器
public class VerticalAdapter extends RecyclerView.Adapter<VerticalAdapter.ViewHolder> {
    private List<String> titles;
    private List<List<String>> contents;
    private OnItemClickListener listener;

    public VerticalAdapter(List<String> titles, List<List<String>> contents) {
        this.titles = titles;
        this.contents = contents;
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_vertical, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        String title = titles.get(position);
        holder.titleTextView.setText(title);
        holder.itemView.setOnClickListener(v -> {
            if (listener != null) {
                listener.onItemClick(position);
            }
        });
    }

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

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView titleTextView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            titleTextView = itemView.findViewById(R.id.titleTextView);
        }
    }
}

// 水平RecyclerView的适配器
public class HorizontalAdapter extends RecyclerView.Adapter<HorizontalAdapter.ViewHolder> {
    private List<String> contents;

    public HorizontalAdapter(List<String> contents) {
        this.contents = contents;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_horizontal, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        String content = contents.get(position);
        holder.contentTextView.setText(content);
    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView contentTextView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            contentTextView = itemView.findViewById(R.id.contentTextView);
        }
    }
}

// 在Activity或Fragment中使用RecyclerView
public class MainActivity extends AppCompatActivity {
    private RecyclerView verticalRecyclerView;
    private RecyclerView horizontalRecyclerView;
    private VerticalAdapter verticalAdapter;
    private HorizontalAdapter horizontalAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        verticalRecyclerView = findViewById(R.id.verticalRecyclerView);
        horizontalRecyclerView = findViewById(R.id.horizontalRecyclerView);

        // 设置垂直RecyclerView的布局管理器和适配器
        verticalRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        verticalAdapter = new VerticalAdapter(getTitles(), getContents());
        verticalRecyclerView.setAdapter(verticalAdapter);

        // 设置水平RecyclerView的布局管理器和适配器
        horizontalRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        horizontalAdapter = new HorizontalAdapter(new ArrayList<>());
        horizontalRecyclerView.setAdapter(horizontalAdapter);

        // 监听垂直RecyclerView的标题项点击事件
        verticalAdapter.setOnItemClickListener(position -> {
            List<String> contentList = getContents().get(position);
            horizontalAdapter.setData(contentList);
        });
    }

    // 获取标题列表
    private List<String> getTitles() {
        // 返回标题列表数据
    }

    // 获取内容列表
    private List<List<String>> getContents() {
        // 返回内容列表数据
    }
}

这个示例代码中,垂直RecyclerView显示标题列表,水平RecyclerView显示具体内容。当点击垂直RecyclerView的标题项时,根据位置获取对应的内容列表,并将内容列表设置给水平RecyclerView的适配器,从而显示相应的内容。

请注意,这只是一个示例代码,你可以根据自己的实际需求进行修改和扩展。另外,腾讯云提供了一系列云计算相关的产品,你可以根据具体需求选择适合的产品进行开发和部署。

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

相关·内容

【RecyclerView】 五、RecyclerView 布局 ( 瀑布流 | 交错网格局管理器 StaggeredGridLayoutManager )

相关资料 本篇博客主要讨论设置不同的布局管理器 , 以及不同布局管理器的参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件...如果当前方向是垂直方向, 该参数设置的是行数. 如果当前方向是水平方向, 该参数设置的是列数. ② int orientation : 布局方向....当方向是 RecyclerView.VERTICAL 垂直方向时 , 网格元素排列顺序是逐行排列 , 先将第一行排满 , 然后将第二行排满 , int spanCount 参数设置的是每行的元素个数 ;...参数设置的是每列的元素个数 ; ( 古代人写字顺序 ) 构造函数原型 : /** * 创建瀑布流网格布局管理器 * * @param spanCount 如果当前方向是垂直方向...如果当前方向是水平方向, 该参数设置的是列数. * @param orientation 布局方向.

1.6K00

【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

viewHolder)方法返回值 , 如果开发者没有设置 , 就使用默认值 ; 该值的作用是 设置 拖动幅度 , 组件在宽度 / 高度 上移动超过该比例 , 就认为拖动触发, 执行拖动相关操作 ;.../ 垂直 方向上的条目组件 宽度 / 高度 ; 如果拖动比例超过在 水平 / 垂直 方向上的条目组件 宽度 / 高度 乘以 threshold 的值 , 则拖动判定成功 , 执行响应的方法 ; 如果拖动比例没有超过该值..., 说明没有触发拖动操作 , 直接返回 ; // 在该判断中 , 使用了 threshold 系数 乘以 水平 / 垂直 方向上的条目组件宽度 ; // 如果拖动比例超过在...水平 / 垂直 方向上的条目组件 宽度 / 高度 乘以 threshold 的值 // 则拖动判定成功 , 执行响应的方法 // 如果拖动比例没有超过该值 , 说明没有触发拖动操作..., 使用了 threshold 系数 乘以 水平 / 垂直 方向上的条目组件宽度 ; // 如果拖动比例超过在 水平 / 垂直 方向上的条目组件 宽度 / 高度 乘以 threshold

1.2K20
  • 写给初学者的Jetpack Compose教程,Lazy Layout

    可能也还好,因为我们一直以来都是这么写的,很多Android开发者都已经习惯了。 但是如果我告诉你,在Compose中只需要编写这些代码就能实现完全相同的效果,你还能坐得住吗?...比如上述例子中使用的LazyColumn,它就是用于在垂直方向上滚动的可复用列表。而LazyRow则是用于在水平方向上滚动的可复用列表。...因此最好的设计方案就是,当用户向下滚动列表时,我们就认为用户不再需要和Fab按钮交互,此时将按钮进行隐藏。 下面具体看一下如何在Compose中实现这种效果。...方案就是,我们需要找到一个能够标识子项唯一性的id值,用于替换之前基于位置变动去触发重组的机制。 至于这个id值是什么?在哪里?你要自己想办法。...比如说我们上述举的例子当中,由于每个数值都不相同,那么就可以直接拿这些数值来当id。 如果你使用的数据源是更复杂的对象类型,那么就需要想办法从这些对象中找到能够标识它唯一性的值来当id。

    65210

    【RecyclerView】 三、RecyclerView 布局 ( 线性布局管理器 LinearLayoutManager )

    文章目录 一、线性布局 1、线性布局管理器 LinearLayoutManager 2、垂直不翻转代码示例 3、水平翻转代码示例 二、完整代码示例 三、RecyclerView 相关资料 本篇博客主要讨论设置不同的布局管理器..., 以及不同布局管理器的参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) , 以及 RecyclerView...】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) 三、自定义适配器 , 本篇博客中使用的适配器代码都是该代码 ; 初始化布局管理器及设置布局管理器 :...这里创建的 LinearLayoutManager 是标准的垂直方向列表 , 不翻转元素 ; //1 ....3、水平翻转代码示例 横向 , 翻转元素 的线性布局示例 : 翻转后 , RecyclerView 加载后 , 会自动跳转到最后一位的位置 ; //1 .

    87900

    Android开发笔记(一百二十二)循环器视图RecyclerView

    它不但提供了三类布局管理,分别实现类似ListView、GridView、瀑布流网格的效果,而且可在代码中随时由RecyclerView调用setLayoutManager方法设置新的布局;一旦调用了setLayoutManager...setReverseLayout : 单独设置是否为相反方向开始布局。默认false,如果设置为true,那么垂直方向将从下往上开始布局,水平方向将从右往左开始布局。...StaggeredGridLayoutManager,这让我们对瀑布流效果的开发大大简化了,只要在适配器代码中动态设置每个网格的高度,系统便会自动在界面上依次排列瀑布流网格。...LinearLayout.VERTICAL表示垂直方向,LinearLayout.HORIZONTAL表示水平方向,通常默认LinearLayout.VERTICAL。...setReverseLayout : 设置是否为相反方向开始布局。默认false,如果设置为true,那么垂直方向将从下往上开始布局,水平方向将从右往左开始布局。

    2.4K20

    ItemTouchHelper 实现交互动画

    并不是多出了两条空白数据,它们是正常的数据,只是看不到了,这是因为RecyclerView条目(itemView)覆用导致的,前面在onChildDraw()方法中对itemView设置了透明和缩小,而一个列表中固定只有几个...* 动作标识分:dragFlags和swipeFlags * dragFlags:列表滚动方向的动作标识(如竖直列表就是上和下,水平列表就是左和右) * wipeFlags...:与列表滚动方向垂直的动作标识(如竖直列表就是左和右,水平列表就是上和下) * * 思路:如果你不想上下拖动,可以将 dragFlags = 0 * 如果你不想左右滑动...也就是通过计算对齐RecyclerView中TargetView 的指定点或者容器中的任何像素点。...控件滑动到顶部和底部 02.RecyclerView嵌套RecyclerView 条目自动上滚的Bug 03.ScrollView嵌套RecyclerView滑动冲突 04.ViewPager嵌套水平RecyclerView

    3.9K20

    RecyclerView详解

    :27.1.1' 2.布局中添加RecyclerView <?...LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置为垂直布局,默认是垂直的...LinearLayoutManager(this); //设置为垂直布局,默认是垂直的(垂直:LinearLayoutManager.VERTICAL,水平:LinearLayoutManager.HORIZONTAL...下面以两者都设置为竖直方向多列的样式来区分: 1、网格样式每一行中的所有 item 高度是一致的,不同行可以不一样,但同行的都是一样的,因此它就实现不了瀑布流的样式了;瀑布流所有的 item 高度都允许不一样...2、网格样式支持 item 占据多列的宽度;瀑布流支持 item 占据总列数的宽度,不支持只占据其中几列。 3、当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。

    3K21

    【RecyclerView】 四、RecyclerView 布局 ( 网格局管理器 GridLayoutManager )

    文章目录 一、网格局管理器 GridLayoutManager 二、网格局管理器默认设置 三、网格局管理器水平方向设置 四、完整代码示例 五、RecyclerView 相关资料 本篇博客主要讨论设置不同的布局管理器..., 以及不同布局管理器的参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) , 以及 RecyclerView...当方向是 RecyclerView.VERTICAL 垂直方向时 , 网格元素排列顺序是逐行排列 , 先将第一行排满 , 然后将第二行排满 , int spanCount 参数设置的是每行的元素个数 ;...---- GridLayoutManager 默认设置是垂直方向 , 不翻转 , 代码如下 : //1 ....三、网格局管理器水平方向设置 ---- 设置网格布局水平方向 : //1 .

    2.1K00

    【Android 事件分发】ItemTouchHelper 实现拖动排序

    /滑动 ) 2、启用长按拖动功能 3、拖动距离判定设置 4、设置拖动排序触发操作 5、RecyclerView.Adapter 适配器中的交换排序操作 三、完整代码实现 1、主界面 2、ItemTouchHelper.Callback...; 设置的是比例值, 返回值为 0.9 , 就意味着滑动宽度/高度的 0.9 倍, 才触发拖动排序 onMove 方法 ; public class Callback extends ItemTouchHelper.Callback...上面案例中设置的拖动幅度是 0.9f , 在 getMovementFlags 方法中设置的拖动方向是上下拖动 , 因此在该案例中 , 上下拖动的幅度必须要在 0.9 倍高度 , 拖动排序功能才能生效...* 滑动分 水平 / 垂直 两个方向 * @param recyclerView * @param viewHolder * @param target * @return...; } /** * 监听滑动事件 * 滑动分 水平 / 垂直 两个方向 * @param recyclerView * @param viewHolder

    2.3K10

    【Android 事件分发】ItemTouchHelper 实现侧滑删除

    重写 ItemTouchHelper.Callback 的 getSwipeThreshold 方法 , 设置用户的滑动距离 , 设置的是比例值, 返回值为 0.5 , 就意味着滑动宽度/高度的一半,...; } } 上面案例中设置的滑动幅度是 0.5f , 在 getMovementFlags 方法中设置的滑动方向是左右滑动 , 因此在该案例中 , 滑动幅度在水平方向上超过 0.5 倍的条目组件宽度..., 侧滑删除才能生效 ; 下面的操作中 , 滑动在水平方向上没有超过组件宽度的 0.5 倍 , 滑动删除不生效 ; 下面的操作中 , 水平方向的滑动幅度超过了 0.5 倍 , 侧滑删除生效 ; 侧滑判定...条件二 : getSwipeEscapeVelocity 方法中设置的滑动速度 , 水平方向上每秒超过 5 像素的速度 , 触发侧滑删除 ; 4、滑动速度判定设置 重写 ItemTouchHelper.Callback...; } /** * 监听滑动事件 * 滑动分 水平 / 垂直 两个方向 * @param recyclerView * @param viewHolder

    66120

    Android:流式布局实现总结

    1 什么是流式布局/标签 说白了呢,就是一种参差不齐的视图,比如: 水平的流式布局 ? 垂直的流式布局 ? 多条目类型流式布局 ? 2实现方式有哪些?...在添加的时候需要动态的计算行数,以及行中剩余宽度是否可以展示目标条目。...假设我们要实现一个宽度满屏之后自动换行的流式标签列表,我们将span总数设置为屏幕宽度,那么,每一个条目所占的span即为该条目的宽度(含marign、padding). ...在 xml 中我们设置了margin 为5dp,padding为10dp         val itemMarginAndPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP...在 xml 中我们设置了margin 为5dp,padding为10dp                val itemMarginAndPadding = TypedValue.applyDimension

    5.2K20

    移动开发作业一

    在每个 Fragment 类中,定义要显示的内容和布局,例如 RecyclerView 列表。 在 Fragment 中处理与该选项卡相关的数据和功能,如加载数据、处理点击事件等。 3....RecyclerView: 在每个 Fragment 中,使用 RecyclerView 控件来显示列表数据。 创建一个适配器类,用于将数据与 RecyclerView 绑定。...适配器类应根据每个选项卡的数据需求自定义,包括数据源、视图绑定和点击事件处理。 使用布局管理器(例如 LinearLayoutManager)来定义列表项的排列方式,可以是垂直或水平。...每个消息项都会垂直排列,并且文本样式和颜色会根据上述设置显示。 图片 该适配器充当RecyclerView和消息数据之间的桥梁,负责加载布局、填充数据,并将数据正确显示在屏幕上。...图片 View对象view用于加载片段的布局,通过inflater.inflate方法将布局文件R.layout.wetalks填充到片段中。这个布局包含一个RecyclerView控件。

    23630

    关于RecyclerView你知道的不知道的都在这了(下)目录正文

    本篇所使用的 RecyclerView 的版本是 26.0.0。 下列标题中,但凡是斜体字,表示该知识点目前暂时没理清楚,留待后续继续补充。...移出屏幕的 ViewHolder 会被缓存到两个容器中,按优先级高到低分别是:mCachedViews 和 mRecyclerPool 该方法就是用于设置 mCachedViews 容器的大小,默认值为...也正是基于这点,我就不理解官方说的让开发者自行维护,怎么维护? 注释 2 中,官方告诉我们在这个方法中,不要去新建一个新的 ItemView,而是直接从旧的里面拿一个复用。...并且,官方在注释中也给出一种应用场景:使用 ViewPager 时各页面中的 RecyclerView 有相同的 Item 布局结构。...外,内部的View之间横竖都以相同空隙间隔开 //实现方式,以水平方向为例: //每个view的left和bottom都设置相同间隙 //去掉第1列的left

    1.3K30

    Android——RecyclerView自定义OnScrollListener实现下拉刷新监听,上拉加载更多功能

    【前言】 针对RecyclerView有很多开源的框架可以直接拿来用,比较有代表性的是BaseRecyclerViewAdapterHelper,功能很强大,具备上拉监听的功能。...为滑动中); onScrolled:滑动状态改变时方法会被调用,第一个参数recyclerView是当前的列表,xy为水平、垂直方向滑动坐标值,所以垂直方向,当y值>0时,说明列表正在向上滑动,的位置,可以判断出下拉、上拉的动作,因此完全可以自定义RecyclerView.OnScrollListener...(@NonNull OnScrollListener listener) 方法实现列表滑动事件的监听,传入的对象为OnScrollListener; 2)用自定义的RecyclerView.OnScrollListener...包裹 RecyclerView; 2)所在类实现SwipeRefreshLayout.OnRefreshListener接口; 3)SwipeRefreshLayout实例化对象设置刷新监听setOnRefreshListener

    3.6K30

    Android经典面试题之RecycleView 深度解析与面试题梳理

    **ItemAnimator**:负责动画效果的播放,如添加、删除、移动项时的动画。 2....RecyclerView 与 ListView 的区别 ListView: 只能实现垂直列表。 不支持装饰器模式(如分割线)。 没有内建的动画支持。 滑动性能较差,因为每个列表项都是独立的视图。...RecyclerView: 支持水平和垂直列表,以及网格布局。 支持装饰器模式,可以轻松添加分割线。 内建动画支持,可以自定义动画效果。 滑动性能优越,通过视图复用和预加载机制优化。 2....结语 RecyclerView 是 Android 开发中处理列表和网格布局的强大工具,它通过一系列优化机制提供了高性能的滑动体验和高效的内存管理。...理解其工作原理和组件协作方式对于开发高性能的 Android 应用至关重要。在面试中,对 RecyclerView 的深入理解也是衡量一个 Android 开发者技能的重要标准。

    17110
    领券