文章目录

  • 一、修改单条数据
  • 二、完整代码示例
  • 三、总体运行效果
  • 四、RecyclerView 相关资料

一、修改单条数据


GridLayoutManager.SpanSizeLookup 的主要作用是设置每个 item 元素占据网格布局的格子数量 ;

默认每个 item 元素占 1 个格子 ;

GridLayoutManager.SpanSizeLookup 使用流程 :

① 自定义类 : 自定义 GridLayoutManager.SpanSizeLookup 子类 , 并实现 public int getSpanSize(int position) 方法 ;

② 设置占用格子数目 : 设置元素在 getSpanSize 方法中 , 设置每个 position 位置占据的格子数量 ;

③ 布局管理器设置 : 调用 setSpanSizeLookup 方法 , 将 GridLayoutManager.SpanSizeLookup 子类对象设置给 GridLayoutManager ;

④ 刷新 UI : 调用 RecyclerView.Adapter 的 notifyDataSetChanged 方法即可刷新 UI ;

设置效果一 : 第一个元素占 4 个格子 , 第二个元素占 2 个格子 , 第三个元素占 2 个格子 ;

        // 设置网格每个位置的元素 占用格子个数layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 第一个元素占 4 个格子if(position == 0){return 4;}// 第二个元素占 2 个格子if(position == 1){return 2;}// 第三个元素占 2 个格子if(position == 2){return 2;}return 1;}});

设置效果二 : 每个元素都占用 2 个格子 ;

                        new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 每个位置的元素都占用 2 个格子return 2;}}

设置效果三 : 偶数位置占 1 个格子 , 奇数位置占 2 个格子 ;

                        new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {if (position % 2 == 0){// 偶数位置占 1 个格子return 1;}else if (position % 2 == 1) {// 奇数位置占 3 个格子return 3;}return 1;}}

二、完整代码示例


package kim.hsl.recyclerview;import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {/*** 数据源*/private ArrayList<String> names = new ArrayList<String>();/*** 当前的 RecyclerView 列表*/private RecyclerView recycler_view;/*** 网格布局管理器*/private GridLayoutManager layoutManager;/*** 适配器*/private Adapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化数据initData();//1 . 从布局中获取 RecyclerViewrecycler_view = findViewById(R.id.recycler_view);//2 . 创建并设置布局管理器//创建布局管理器layoutManager = new GridLayoutManager(this,4,RecyclerView.VERTICAL,false);// 设置网格每个位置的元素 占用格子个数layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 第一个元素占 4 个格子if(position == 0){return 4;}// 第二个元素占 2 个格子if(position == 1){return 2;}// 第三个元素占 2 个格子if(position == 2){return 2;}return 1;}});//设置布局管理器recycler_view.setLayoutManager(layoutManager);// 设置边距recycler_view.addItemDecoration(new ItemDecoration());//3 . 创建并设置列表适配器adapter = new Adapter();recycler_view.setAdapter(adapter);// 初始化点击事件initClick();}/*** 初始化数据*/private void initData(){names.add("宋江");names.add("卢俊义");names.add("吴用");names.add("公孙胜");names.add("关胜");names.add("林冲");names.add("秦明");names.add("呼延灼");names.add("花荣");names.add("柴进");names.add("李应");names.add("朱仝");names.add("鲁智深");names.add("武松");names.add("董平");names.add("张清");names.add("杨志");names.add("徐宁");names.add("索超");}void initClick(){// 模式 1findViewById(R.id.mod_1).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 每个位置的元素都占用 2 个格子return 2;}});// 重新刷新布局adapter.notifyDataSetChanged();}});// 模式 2findViewById(R.id.mod_2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 给网格布局管理器设置新的layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {if (position % 2 == 0){// 偶数位置占 1 个格子return 1;}else if (position % 2 == 1) {// 奇数位置占 3 个格子return 3;}return 1;}});// 重新刷新布局adapter.notifyDataSetChanged();}});}/*** RecyclerView 适配器*/public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View root_view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview, parent, false);return new ViewHolder(root_view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {holder.text.setText("" + names.get(position));}@Overridepublic int getItemCount() {return names.size();}public class ViewHolder extends RecyclerView.ViewHolder {TextView text;public ViewHolder(@NonNull View itemView) {super(itemView);text = itemView.findViewById(R.id.text);}}}}

三、总体运行效果


四、RecyclerView 相关资料


官方文档 :

使用 RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview

高级 RecyclerView 自定义 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview-custom

RecyclerView 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView

RecyclerView.Adapter 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.Adapter

RecyclerView.ViewHolder 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder

RecyclerView.ItemDecoration 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ItemDecoration

GridLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/GridLayoutManager

LinearLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/LinearLayoutManager

StaggeredGridLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/StaggeredGridLayoutManager

代码示例 :

GitHub 源码地址 : https://github.com/han1202012/001_RecyclerView

博客源码快照 : https://download.csdn.net/download/han1202012/15006329

( 使用 Android Studio 打开 )

【RecyclerView】 十四、GridLayoutManager 网格布局管理器 ( GridLayoutManager.SpanSizeLookup 指定 item 元素占用网格个数 )相关推荐

  1. java swing 常用的三种布局方式:边界布局、流布局、网格布局管理器

    作者:firstmiki 链接:http://www.cnblogs.com/firstmiki/p/6340001.html 来源:firstmiki的博客 著作权归作者所有,转载请联系作者获得授权 ...

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

    文章目录 一.网格局管理器 GridLayoutManager 二.网格局管理器默认设置 三.网格局管理器水平方向设置 四.完整代码示例 五.RecyclerView 相关资料 本篇博客主要讨论设置不 ...

  3. Java GUI(图形用户界面)-----GridLayout(网格布局管理器)详解

    GridLayout(网格布局管理器) 可以把容器分成n行m列大小相等的网格,每个网格放置一个组件,按照从左往右,从上往下的顺序依次添加,放置在Gird Layout布局管理器的组件将自动占据网格的整 ...

  4. java常用布局管理器(流布局管理器、边界布局管理器、网格布局管理器)

    在Swing中,每个组件在容器中都有一个具体的位置大小.而在容器中摆放各种组件时很难判断其具体位置和大小,使用布局管理器比程序员直接在容器中控制Swing组件的位置和大小方便得多,可以更加有效地处理整 ...

  5. java 网格布局管理器,Java图形化界面设计——布局管理器之GridLayout(网格布局)...

    网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式 ...

  6. java学习(73):GUL网格布局管理器

    //面向对象思想,网格管理布局器 import java.awt.*; import javax.swing.*; public class test08 extends JFrame {JButto ...

  7. java 网格布局管理器,Java使用网格组布局管理器

    package com.han; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.Grid ...

  8. java73-GUL网格布局管理器

    //面向对象思想,网格管理布局器 import java.awt.*; import javax.swing.*; public class test08 extends JFrame {     J ...

  9. Java Swing布局管理器

    引言 在使用 Swing 向容器添加组件时,需要考虑组件的位置和大小.如果不使用布局管理器,则需要先在纸上画好各个组件的位置并计算组件间的距离,再向容器中添加.这样虽然能够灵活控制组件的位置,实现却非 ...

最新文章

  1. 独家 | Python 3.10发布——你应该知道的五大新特性
  2. JVM的GC简介和实例
  3. PHP 对象、数组间的转换
  4. sqlite3命令详解
  5. Spark读取配置源码剖析
  6. jms activemq_带有ActiveMQ的JMS
  7. 您一直在寻找5+个简单的一线工具来提升Python可视化效果
  8. iOS开发——高级篇——二维码的生产和读取
  9. 灵魂拷问:a = 1 + 2 究竟是怎么被 CPU 执行的
  10. oracle sql语句 只读,Oracle_SQL语句
  11. 基于Java jsp+mysql+Spring的汽车出租平台租赁网站平台设计和实现
  12. 腾讯云直播开发日记 (二)附近直播-直播礼物-直播回放
  13. 制作一个全盘搜索器 ,能搜索整个磁盘所有目录
  14. java StringBuilder用法,用逗号拼接字符串 zhaoqian,sunli,zhouwu
  15. Vue入门(Vue.js,库与框架,MVVM,BootCDN,Vue入门,数据双向绑定,vue事件,生命周期,钩子函数 )
  16. Leetcode 1153 字符串转化
  17. 闲鱼,越分享才越有价值
  18. 涂鸦模组开发(压力传感器HX711)——4. 上报传感器数据给涂鸦模块
  19. 电商运营到底做什么?说出来你也不信。
  20. linux命令之ls

热门文章

  1. VC回调函数定义和使用
  2. legend3---阿里云如何多个域名指向同一个网站
  3. 秋招 百度二轮面试---血淋淋的经历写实
  4. Lintcode 167. 链表求和 221. 链表求和 II 题解
  5. c++面对对象设计 2
  6. [TJOI2013]循环格
  7. 登录状态保持Session/Cookie
  8. python入门第二天__练习题
  9. java数值运算后精度丢失问题
  10. 关于判断checkbox选中问题