日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/6/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【RecyclerView】 十四、GridLayoutManager 网格布局管理器 ( GridLayoutManager.SpanSizeLookup 指定 item 元素占用网格个数 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、修改單條數據
  • 二、完整代碼示例
  • 三、總體運行效果
  • 四、RecyclerView 相關資料





一、修改單條數據



GridLayoutManager.SpanSizeLookup 的主要作用是設置每個 item 元素占據網格布局的格子數量 ;

默認每個 item 元素占 1 個格子 ;


GridLayoutManager.SpanSizeLookup 使用流程 :

① 自定義類 : 自定義 GridLayoutManager.SpanSizeLookup 子類 , 并實現(xiàn) public int getSpanSize(int position) 方法 ;

② 設置占用格子數目 : 設置元素在 getSpanSize 方法中 , 設置每個 position 位置占據的格子數量 ;

③ 布局管理器設置 : 調用 setSpanSizeLookup 方法 , 將 GridLayoutManager.SpanSizeLookup 子類對象設置給 GridLayoutManager ;

④ 刷新 UI : 調用 RecyclerView.AdapternotifyDataSetChanged 方法即可刷新 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 . 創(chuàng)建并設置布局管理器//創(chuàng)建布局管理器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 . 創(chuàng)建并設置列表適配器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 創(chuàng)建動態(tài)列表 : 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 元素占用网格个数 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。